我有这个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中有不同的字段。
但是,只有一个可能的元素(IpAdress
,FileValue
和StringValue
)可以同时使用。
实际的代码只是用null来杀死我的对象反序列化。
如何让它工作,我只需要一个属性?
答案 0 :(得分:1)
在IpClass
,FileClass
和string
字段中使用三个不同的类。否则您应该自定义序列化
在基类上使用属性[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; }
}