Xml .NET:删除ArrayOfXmlElement和XmlElement

时间:2016-06-20 12:35:07

标签: c# .net xml xml-serialization

我为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();
    }
}

3 个答案:

答案 0 :(得分:0)

我认为你至少可以简化你的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”元素。

答案 1 :(得分:0)

当然,您正在序列化一个BdfXmlData

数组 伪代码中的

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

会产生你所拥有的东西,而

伪代码中的

..

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

应该给你你想要的东西!

答案 2 :(得分:0)

确切,我序列化了Documents集合:

SerializationHelper.GetSerializedObject(xmlRootData.Documents);

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

<document>
           ...
<document>

我将这些元素添加到我的列表&#34;文档&#34;。

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>