我想做一些像这样的事情
[System.Xml.Serialization.XmlElement(ElementName= "DealId")]
[System.Xml.Serialization.XmlIgnore]
public int ID { get; set; }
在运行期间我从一个元素中选择。 我怎么能这样做?
答案 0 :(得分: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
。
答案 1 :(得分:1)
您似乎希望选择序列化Id字段。
但是,您可以在同一个类中定义一个方法,如下所示:
public bool ShouldSerializeID()
{
return !string.IsNullOrWhiteSpace(this.ID);
}
然后删除[XmlIgnore]属性。在此示例中,ID将在具有值的位置进行序列化。