具有不同类型但元素名称和i:type属性相同的XMLArray

香卡

我正在尝试将我拥有的一些数据序列化为这种XML格式,但无法实现相同的数据。

所需的XML输出如下:

<?xml version="1.0" encoding="utf-8"?>
<Root xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <Datas>
    <Data xmlns="" i:type="DataA">
      <Name>A1</Name>
      <ADesc>Description for A</ADesc>
    </Data>
    <Data xmlns="" i:type="DataB">
      <Name>B1</Name>
      <BDesc>Description for b</BDesc>
    </Data>
  </Datas>
</Root>

我为序列化创建的类如下:

public class Data
{
    [XmlElement("Name")]
    public string Name { get; set; }
}

public class DataA : Data
{
    [XmlElement("ADesc")]
    public string ADesc { get; set; }
}

public class DataB : Data
{
    [XmlElement("BDesc")]
    public string BDesc { get; set; }
}

[XmlRoot("Root")]
public class Root
{
    [XmlArray("Datas")]
    [XmlArrayItem(Type = typeof(Data))]
    [XmlArrayItem(Type = typeof(DataA))]
    [XmlArrayItem(Type = typeof(DataB))]
    public List<Data> Datas { get; set; }
}

我使用以下方法进行序列化:

internal static string Serialize(Root obj)
{
    var ns = new XmlSerializerNamespaces();
    ns.Add("i", "http://www.w3.org/2001/XMLSchema-instance");

    XmlSerializer xmlSerializer = new XmlSerializer(typeof(Root));

    using (StringWriter textWriter = new StringWriter())
    {
        xmlSerializer.Serialize(textWriter, obj, ns);
        return textWriter.ToString();
    }
}

但是我得到的输出是这样的(这是不正确的):

<?xml version="1.0" encoding="utf-8"?>
<Root xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <Datas>
    <DataA>
      <Name>A1</Name>
      <ADesc>Description for A</ADesc>
    </DataA>
    <DataB>
      <Name>B1</Name>
      <BDesc>Description for b</BDesc>
    </DataB>
  </Datas>
</Root>
数据库

为了产生的{http://www.w3.org/2001/XMLSchema-instance}type使用属性XmlSerializer,你需要附加[XmlInclude(typeof(XXX))]的所有子类XXXData在你的对象图声明类型的地方,即在Root类或Data类本身:

//[XmlInclude(typeof(DataA))]  /* Could also go here if you prefer. */
//[XmlInclude(typeof(DataB))]  /* Could also go here if you prefer. */
public class Data
{
    [XmlElement("Name")]
    public string Name { get; set; }
}

public class DataA : Data
{
    [XmlElement("ADesc")]
    public string ADesc { get; set; }
}

public class DataB : Data
{
    [XmlElement("BDesc")]
    public string BDesc { get; set; }
}

[XmlRoot("Root")]
[XmlInclude(typeof(DataA))]
[XmlInclude(typeof(DataB))]
public class Root
{
    [XmlArray("Datas")]
    public List<Data> Datas { get; set; }
}

欲了解更多信息,请参阅声明序列化类型故障排除常见问题与XmlSerializer的,也xsi:type属性绑定支持

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

具有相同类型但名称不同的多个元素?

来自分类常见问题

与POJO + Jackson具有相同名称和不同类型的anyOf字段的Json模式

来自分类Dev

在C中实现2个具有相同类型和名称但参数不同的函数

来自分类Dev

设置元素名称与RootElement属性相同

来自分类Dev

Java模板,如何使用两个具有相同名称和不同类型的类

来自分类Dev

XSD具有相同名称但类型不同的多个元素

来自分类Dev

XSD具有相同名称但类型不同的多个元素

来自分类Dev

具有不同类型元素的数组

来自分类Dev

为什么在使用动态类型和动态绑定时,两个具有相同名称(属于不同类)的方法应具有相同的原型?

来自分类Dev

为什么在使用动态类型和动态绑定时,两个具有相同名称(属于不同类)的方法应具有相同的原型?

来自分类Dev

Scala:具有相同类的对象具有不同的类型?

来自分类Dev

具有相同类型但有不同限制的多个列表属性的类

来自分类Dev

具有相同元素和属性名称的RestKit XML映射

来自分类Dev

如何在硒中的不同标签中定位具有相同名称和相同属性的元素

来自分类Dev

如何使用Java和Xerces NodeIterator获得具有相同名称但属性不同的同级元素的同级元素

来自分类Dev

C#JSON-序列化具有相同属性的不同类型的多个对象

来自分类Dev

多次实现相同的通用接口,该通用接口包含具有不同类型参数的属性

来自分类Dev

相同类型/类的对象是否可能具有不同的数据属性?

来自分类Dev

聚合具有相同值的相同类型节点的属性

来自分类Dev

typedef更改具有不同类型名称的值名称

来自分类Dev

在C#中反序列化具有不同类型名称的XML元素

来自分类Dev

一次选择所有具有相同类和不同编号的元素

来自分类Dev

反序列化可以具有不同类型的属性名称

来自分类Dev

具有相同类型属性的接口或类型的 Typescript 简写

来自分类Dev

声明具有相同名称的不同类的多个对象

来自分类Dev

为什么具有相同类型和值的变量print()不同?

来自分类Dev

从多个配置文件创建的ClassPathXmlApplicationContext覆盖具有相同类型和不同ID的bean

来自分类Dev

在XSD中,两个元素可以具有不同的名称但具有相同的类型吗?

来自分类Dev

在XSD中,两个元素可以具有不同的名称但具有相同的类型吗?

Related 相关文章

  1. 1

    具有相同类型但名称不同的多个元素?

  2. 2

    与POJO + Jackson具有相同名称和不同类型的anyOf字段的Json模式

  3. 3

    在C中实现2个具有相同类型和名称但参数不同的函数

  4. 4

    设置元素名称与RootElement属性相同

  5. 5

    Java模板,如何使用两个具有相同名称和不同类型的类

  6. 6

    XSD具有相同名称但类型不同的多个元素

  7. 7

    XSD具有相同名称但类型不同的多个元素

  8. 8

    具有不同类型元素的数组

  9. 9

    为什么在使用动态类型和动态绑定时,两个具有相同名称(属于不同类)的方法应具有相同的原型?

  10. 10

    为什么在使用动态类型和动态绑定时,两个具有相同名称(属于不同类)的方法应具有相同的原型?

  11. 11

    Scala:具有相同类的对象具有不同的类型?

  12. 12

    具有相同类型但有不同限制的多个列表属性的类

  13. 13

    具有相同元素和属性名称的RestKit XML映射

  14. 14

    如何在硒中的不同标签中定位具有相同名称和相同属性的元素

  15. 15

    如何使用Java和Xerces NodeIterator获得具有相同名称但属性不同的同级元素的同级元素

  16. 16

    C#JSON-序列化具有相同属性的不同类型的多个对象

  17. 17

    多次实现相同的通用接口,该通用接口包含具有不同类型参数的属性

  18. 18

    相同类型/类的对象是否可能具有不同的数据属性?

  19. 19

    聚合具有相同值的相同类型节点的属性

  20. 20

    typedef更改具有不同类型名称的值名称

  21. 21

    在C#中反序列化具有不同类型名称的XML元素

  22. 22

    一次选择所有具有相同类和不同编号的元素

  23. 23

    反序列化可以具有不同类型的属性名称

  24. 24

    具有相同类型属性的接口或类型的 Typescript 简写

  25. 25

    声明具有相同名称的不同类的多个对象

  26. 26

    为什么具有相同类型和值的变量print()不同?

  27. 27

    从多个配置文件创建的ClassPathXmlApplicationContext覆盖具有相同类型和不同ID的bean

  28. 28

    在XSD中,两个元素可以具有不同的名称但具有相同的类型吗?

  29. 29

    在XSD中,两个元素可以具有不同的名称但具有相同的类型吗?

热门标签

归档