から選択するにはどうすればいくつかのこと、このは、二つの異なる属性
[System.Xml.Serialization.XmlElement(ElementName= "DealId")]
[System.Xml.Serialization.XmlIgnore]
public int ID { get; set; }
のように、私は一つの要素から選ぶ実行時にやりたいです。 どうすればいいですか?
から選択するにはどうすればいくつかのこと、このは、二つの異なる属性
[System.Xml.Serialization.XmlElement(ElementName= "DealId")]
[System.Xml.Serialization.XmlIgnore]
public int ID { get; set; }
のように、私は一つの要素から選ぶ実行時にやりたいです。 どうすればいいですか?
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
を持っていることを指定し、実行時にいくつかの条件に基づいて。
オプションでIdフィールドをシリアル化すると思われるようです。
しかし、あなたはこのように同じクラスのメソッドを定義することができます
public bool ShouldSerializeID()
{
return !string.IsNullOrWhiteSpace(this.ID);
}
をしてから、[XmlIgnore]属性を削除します。この例では、IDは値を持つ場所でシリアル化されます。
ありがとうございました –