【问题标题】:Xml .NET : Remove ArrayOfXmlElement and XmlElementXml .NET:删除 ArrayOfXmlElement 和 XmlElement
【发布时间】:2016-06-20 12:35:07
【问题描述】:

我为 XML 序列化创建了一个 .NET 类

[Serializable()]
[XmlRoot("documents")]
public class BdfXmlData
{
    [XmlElement("document")]
    public List<XmlElement> Documents { get; set; }

    public BdfXmlData()
    {
        Documents = new List<XmlElement>();
    }
}

当我尝试序列化一个对象时,我得到了这棵树:

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfXmlElement xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <XmlElement>
    <documents>
      <document>
               ...
      <document>
    <documents>
  </XmlElement>
</ArrayOfXmlElement>

我怎样才能拥有以下三个?

<?xml version="1.0" encoding="utf-8"?>
<documents>
  <document>
    ...
  <document>
<documents>

提前致谢。

序列化我的类的代码如下:

public static string GetSerializedObject<T>(T t)
{
    using (MemoryStream stream = new MemoryStream())
    {
        XmlSerializer serializer = new XmlSerializer(typeof(T));
        serializer.Serialize(stream, t);
        stream.Position = 0;
        using (StreamReader reader = new StreamReader(stream))
        return reader.ReadToEnd();
    }
}

【问题讨论】:

  • 你的意思是你想要 节点之间的一切?

标签: c# .net xml xml-serialization


【解决方案1】:

我认为您至少可以简化您的 xml 代码:

<ArrayOfdocuments xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <documents>
    <document>
               ...
    <document>
  <documents>
</ArrayOfdocuments>

“XmlElement”元素可以省略。

【讨论】:

  • 我的属性是“文档”,xml 标签是“文档”
  • 你想在你的xml中多次使用“XmlElement”元素吗?
  • 是的,我想在根目录(文档)中有几个 实例
【解决方案2】:

你肯定是在序列化一个 BdfXmlData 数组

在伪代码中

BdfXmlData[] dataInArray = new [] {new BdfXmlData()};
GetSerializedObject(dataInArray)

会产生你所拥有的,而

在伪代码中..

BdfXmlData data = new BdfXmlData();
GetSerializedObject(data)

应该给你你想要的!

【讨论】:

    【解决方案3】:

    没错,我序列化了 Documents 集合:

    SerializationHelper.GetSerializedObject(xmlRootData.Documents);
    

    事实上,我收到了一些带有这棵树的 XmlElement:

    <document>
               ...
    <document>
    

    然后我将这些元素添加到我的“文档”列表中。

    xmlRootData.Documents.Add(xmlData);
    

    当我序列化我的最终对象 (BdfXmlData) 时,xml 包含 2 个文档标签和 2 个文档标签

    string xmlData = SerializationHelper.GetSerializedObject(xmlRootData);
    

    <documents xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <document>
        <documents>
          <document>
          </document>
        <documents>
      </document>
    </documents>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多