我正在使用的数据源总是使用相同的父类(xml中的Models)发送数据,使用xsi:type来确定类的实际类型。这一直工作正常,直到他们开始向xsi:type添加命名空间。现在,无论我尝试什么,它都不会反序列化。
这是XML:
<ModelResource xmlns:ot="http://www.example.com/otSpace">
<Models xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance xsi:type="ot:myChildClass">
Stuff here
</Models>
</ModelResource>
根节点
[XmlRoot("ModelResource")]
public class XmlRoot
{
[XmlElement("Models")]
public List<BaseObject> Bases { get; set; }
}
父类
[XmlInclude(typeof(MyChildClass))]
public abstract class BaseObject
{
}
儿童班
[XmlType(TypeName = "myChildClass", Namespace = "http://www.example.com/otSpace")]
public class MyChildClass : BaseObject
{
}
当我反序列化这个XML时,我最终得到了错误:
{“无法识别指定的类型:name ='myChildClass',namespace ='http://www.example.com/otSpace',at。”}
感谢您的帮助。
答案 0 :(得分:1)
这些类适用于您的示例。我已经将这些类命名为元素名称,以便更容易理解:
public class ModelResource
{
public Models Models { get; set; }
}
[XmlInclude(typeof(MyChildClass))]
[XmlRoot(Namespace = "")]
public abstract class Models
{
}
[XmlType("myChildClass", Namespace = "http://www.example.com/otSpace")]
public class MyChildClass : Models
{
[XmlText]
public string Value { get; set; }
}
有关正常工作的演示,请参阅this fiddle。