2017-04-23 73 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物业将不得不在XmlElementAttributeXmlIgnoreAttribute一些条件。

+0

谢谢你,因为它的工作原理 –

1

你似乎想要选择序列化Id字段。

但是,可以在这样的同一类中定义的方法:

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

,然后取下[XmlIgnore]属性。在这个例子中,ID将被序列化到它有值的地方。

相关问题