反序列化未知类型

Min*_*wth 3 .net c# xml serialization

我有以下XML:

<property name="someName" value="someValue" />
Run Code Online (Sandbox Code Playgroud)

或者,这可能是:

<property name="someName" value="5" />
Run Code Online (Sandbox Code Playgroud)

要么:

<property name="someName" value="true" />
Run Code Online (Sandbox Code Playgroud)

等等...

[Serializable]
[XmlType("property")]
public class Property
{
    [XmlAttribute("name")]
    public string Name { get; set; }
    [XmlAttribute("value")]
    public object Value { get; set; }

    public Property()
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码不起作用.我可以使用字符串或任何特定的东西,只要它始终是特定类型.我希望对象允许任何已知类型的工作.

Dar*_*rov 5

除非使用IXmlSerializable接口实现自定义序列化并手动处理该情况,否则无法将对象用作XmlSerializer属性的数据类型.如果您没有将Value属性序列化为属性,则可以使用它XmlInclude来指定可能的已知类型(例如int,bool,string,...),并且序列化程序将在XML上发出另外的属性以指定确切的类型这样它就知道如何反序列化.但所有这些都不适用于您的场景,因为您正在使用属性.不幸的是,您必须重新考虑XML结构或使用自定义序列化.XmlSerializer根本无法处理这种情况.

另一种可能性是将此属性定义为String并执行后序列化处理.甚至可能在模型上定义另一个只有一个getter的属性,并且基于该字符串的值可能会尝试将其解析为某个底层类型.