2017-01-16 9 views
1

私はノードを持つXML文字列があります。デシリアライズXML

MyXmlString="<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><MyNodes><Node1 /><Node2 /><Node3 /></MyNodes>"; 

を私はクラスがあります。

public class MyClass 
{ 
    [DataMember] 
    [XmlElement("Node1", Order = 10)] 
    public String Node1 { get; set; } 

    [DataMember] 
    [XmlElement("Node3", Order = 20)] 
    public String Node3 { get; set; } 
} 

私はXMLからオブジェクトをデシリアライズするとき、私はスキップしたいと思いますが文字列内のノード2:

MyClass MyObject= XElement.Parse(MyXmlString).FromXml<MyClass>(); 

MyObjectNode1の値を持っていますが、Node3xmlStringに値がある場合でも、nullです。 XmlにオブジェクトをシリアライズするときにxmlIgnoreを使用できます。しかし、私の場合は反対です - xmlには必要のないノードがあります。これを行う最も簡単な方法は何でしょうか?

+0

それはあなたのxmlだ場合、それは、私はサンプルのためだけにいくつかの仮想XMLを書かれている有効なXML – Jonesopolis

+0

ではありません。私はそれをもっと明確にするように修正しました。通知ありがとう。 – Simon

答えて

1

Order属性を削除すると、Node3の値が得られます。XmlSerializerはNode2を無視します。あなたが本当に注文する必要がない場合は、それを使用すべきではありません。

は非常によく似たケースについてはこちらをご覧ください:XmlSerializer. Skip xml unknown node

+0

注文属性を移動できません。どのようにnode2をクラス定義に追加することができますか、タイプがわからないので(型が不明なサブ要素を持つ配列です)、オブジェクト型として使用してください。 [DataMember] [XmlIgnore( "Node2 "、Order = 20)] public Object [] Node2 {get;セット; } – Simon

+0

私はあなたがちょうどそれを\tとして追加することができると思います。[XmlElement( "Node2"、Order = 15)] \t public Object Node2 {get;セット; } あなたのシンプルなXMLとそれは動作します。 –

+0

@Simon注文属性を削除できないのはなぜですか?それがこれが働くのを妨げる原因で​​す。彼らがあなたを助ける何かをやっているのはわかりません。 –

関連する問題