2017-04-23 15 views
-4

から選択するにはどうすればいくつかのこと、このは、二つの異なる属性

[System.Xml.Serialization.XmlElement(ElementName= "DealId")] 
[System.Xml.Serialization.XmlIgnore] 
public int ID { get; set; } 

のように、私は一つの要素から選ぶ実行時にやりたいです。 どうすればいいですか?

答えて

2

XmlAttributeOverridesクラスを使用して、実行時に動的に属性をオーバーライドできます。ここでは例です:

public class MyModel 
{ 
    public int ID { get; set; } 
} 

、その後、シリアライズ:この例では

var attributeOverrides = new XmlAttributeOverrides(); 
var attributes = new XmlAttributes(); 
if (SomeCondition()) 
{ 
    attributes.XmlIgnore = true; 
} 
else 
{ 
    attributes.XmlElements.Add(new XmlElementAttribute("DealId")); 
} 

attributeOverrides.Add(typeof(MyModel), "ID", attributes); 

// when instantiating the XmlSerializer we specify the attribute overrides 
var serializer = new XmlSerializer(typeof(MyModel), attributeOverrides); 
var model = new MyModel 
{ 
    ID = 5, 
}; 

serializer.Serialize(Console.Out, model); 

を、我々は我々のモデルのIDプロパティはどちらかXmlElementAttributeまたはXmlIgnoreAttributeを持っていることを指定し、実行時にいくつかの条件に基づいて。

+0

ありがとうございました –

1

オプションでIdフィールドをシリアル化すると思われるようです。

しかし、あなたはこのように同じクラスのメソッドを定義することができます

public bool ShouldSerializeID() 
{ 
    return !string.IsNullOrWhiteSpace(this.ID); 
} 

をしてから、[XmlIgnore]属性を削除します。この例では、IDは値を持つ場所でシリアル化されます。

関連する問題