【问题标题】:Serialize same object type at multiple levels在多个级别序列化相同的对象类型
【发布时间】:2016-05-03 04:44:56
【问题描述】:

我正在寻找这样的 XML 结构 -

<Directory id="ID1" Name="N1">
   <Directory id="ID2" Name="N2">
      <Directory id="ID3" Name="N3">
         <Directory id="ID4" Name="N4"/>
      </Directory>
   </Directory>
</Directory>

我写了一个类-

namespace Application1
{
   public class Directory
   {
      [XmlAttribute]
      public string Id { get; set; }
      [XmlAttribute]
      public string Name { get; set; }
      [XmlElement("Directory ")]
      public Dir[] Directory { get; set; }
   }
}

但这不会以我想要的形式生成 XML。

【问题讨论】:

  • 如果你删除[XmlElement("Directory ")]中目录后面的空格,它将为你生成正确的xml。
  • 如果你的意思是你需要删除生成的 xml 的 xml 命名空间,你可以看看这个问题:stackoverflow.com/q/2950658/1095390

标签: c# xml serialization xml-serialization


【解决方案1】:

.net 框架自带的通用 XML 序列化器是 XmlSerializer。 您需要做的就是序列化根对象并将序列化的内容写入 XDocument 以供将来使用。

为你的类声明添加 [Serializable] 属性:

[Serializable] public class Directory { [XmlAttribute] public string Id { get; set; } [XmlAttribute] public string Name { get; set; } [XmlElement("Directory")] public Directory[] Directories { get; set; } }

然后使用以下代码:

XmlSerializer serializer = new XmlSerializer(typeof(Directory));
XDocument doc = new XDocument();
using (var writer = doc.CreateWriter())
{
      serializer.Serialize(writer, rootDir);
}

注意:如果在树的任何级别发生任何引用循环,序列化会崩溃。

【讨论】:

    猜你喜欢
    • 2018-02-28
    • 1970-01-01
    • 2020-12-25
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 2016-03-02
    • 1970-01-01
    • 2017-07-07
    相关资源
    最近更新 更多