选择我想要做一些这样的事如何从两个不同的属性
[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将被序列化到它有值的地方。
谢谢你,因为它的工作原理 –