スキーマを保証せずに.NET XMLシリアル化を使用する方法
-
06-07-2019 - |
質問
基本的に、デシリアライズする必要があるxmlがいくつかあります。コードを作成する時点で、XMLの構造はわかりますが、シリアル化コードを更新せずにxmlに簡単な変更を加えたいと思います。
例:
<foo>
<bar/>
</foo>
関連付けられた直列化可能クラスで定義されていない追加のノードを追加した場合でも、fooを逆シリアル化できるようにしたい。
<foo>
<bar/>
<extra-tag/>
</foo>
解決
あなたの質問を正しく理解すれば、これはうまくいくはずです。
クラスを指定:
[XmlRoot("foo")]
public class Foo
{
[XmlElement("bar")]
public string Bar;
[XmlElement("extra-tag")]
public string ExtraTag;
}
このコードは問題なく動作します:
string xml =
@"<foo>
<bar>bar</bar>
<extra-tag>extra-tag</extra-tag>
</foo>";
XmlSerializer serializer = new XmlSerializer(typeof(Foo));
Foo afoo = (Foo)serializer.Deserialize(new StringReader(xml));
ただし、クラスが次のようになっている場合:
[XmlRoot("foo")]
public class Foo
{
[XmlElement("bar")]
public string Bar;
}
コードは引き続き動作します
所属していません StackOverflow