使用多个名称空间反序列化xml

时间:2016-05-14 08:48:57

标签: c# xml

我正在使用的数据源总是使用相同的父类(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。”}

感谢您的帮助。

1 个答案:

答案 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