Xml.Serialization对象

时间:2017-09-19 11:47:25

标签: c# xml

我有这个Property并希望像这样使用它:

public class XmlValue : INullable
{
    [XmlElement("IpAdress", typeof(IpClass))]
    [XmlElement("FileValue", typeof(FileClass))]
    [XmlElement("StringValue", typeof(string))]
    public object Value { get; set; }

    public bool IsNull => Value == null;
}

因此,public object Value的嵌套Xml-Class中有不同的字段。 但是,只有一个可能的元素(IpAdressFileValueStringValue)可以同时使用。

实际的代码只是用null来杀死我的对象反序列化。

如何让它工作,我只需要一个属性?

1 个答案:

答案 0 :(得分:1)

IpClassFileClassstring字段中使用三个不同的类。否则您应该自定义序列化

在基类上使用属性[XmlInclude(typeof(YourClass))]来声明dirived类。

[XmlInclude(typeof(IpClass))]
[XmlInclude(typeof(FileClass))]
[XmlInclude(typeof(StringValue))]
public abstract class AbstractValue : INullable
{   
    public virtual bool IsNull => Value == null;
}
public sealed class IpValue : AbstractValue
{   
    public IpClass Value { get; set; }
}
public sealed class FileValue : AbstractValue
{   
    public FileClass Value { get; set; }
}
public sealed class StringValue : AbstractValue
{   
    public string Value { get; set; }
}