質問

基本的に、デシリアライズする必要がある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;
}

コードは引き続き動作します

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top