繁体   English   中英

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

[英]Deserializing xml with multiple namespaces

我正在使用的数据源始终使用相同的父类(xml中的模型)通过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 ',位于。”}

谢谢你的帮助。

这些类适用于您的示例。 我已将这些类命名为与元素名称相同,只是为了使其易于理解:

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; }
}

请参阅此小提琴以获得有效的演示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM