如何从两个不同的属性中进行选择

时间:2017-04-23 06:05:42

标签: c#

我想做一些像这样的事情

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

在运行期间我从一个元素中选择。 我怎么能这样做?

2 个答案:

答案 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属性将具有XmlElementAttributeXmlIgnoreAttribute

答案 1 :(得分:1)

您似乎希望选择序列化Id字段。

但是,您可以在同一个类中定义一个方法,如下所示:

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

然后删除[XmlIgnore]属性。在此示例中,ID将在具有值的位置进行序列化。