【问题标题】:XML Object Serialization on Collection At Root Level根级集合上的 XML 对象序列化
【发布时间】:2012-01-11 14:05:59
【问题描述】:

尝试将 XML 文件从第三方工具反序列化为自定义软件类。问题是 XML 有点傻,因为“根”项实际上是集合的声明。我已经用 XMLArray 和其他定义来定义序列化做了很多工作,但这似乎不起作用。我能做的最好的事情是让集合读入,但集合中的所有对象都没有用变量初始化。

这是我所面临的一个例子:

XML:

<Animals>
  <Animal>
    <Name>Mr. Cow</Name>
    <Type>Cow</Type>
  </Animal>
  <Animal>
    <Name>Belle</Name>
    <Type>Cow</Type>
  </Animal>
  <Animal>
    <Name>Porky</Name>
    <Type>Pig</Type>
  </Animal>
</Animals>

然后,我在“农场”对象中将 XMLRoot 定义为“动物”。并为我的“动物”课程提供一个列表属性。如果我定义该属性(列表 AnimalCollection),我能得到的最好的结果是 3 个未启动的 Animal 对象的列表(没有设置任何值)。

在办公室周围,我们能想到的最好的办法是在尝试反序列化并像往常一样使用它之前,将一个节点作为流添加到文件中,但显然这似乎是一个可怕的 hack。希望有更好的方法,我只是想念。

我也考虑过手动读取文档...但再次希望有更优雅的方式。

【问题讨论】:

    标签: c# xml-serialization


    【解决方案1】:
    XmlSerializer serializer = new XmlSerializer(typeof(Animal[]), new XmlRootAttribute("Animals"));
    
    public class Animal
    {
        [XmlElement]
        public string Name;
        [XmlElement]
        public string Type;
    }
    

    【讨论】:

    • 那是另一种选择……不知道为什么我没有马上想到这一点。我会保持打开状态,以防有人知道一个允许这更容易的 XML 标记,但这肯定会起作用。谢谢! (已经+1)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    • 2010-11-30
    • 1970-01-01
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多