【问题标题】:XmlSerializer is not acting like I think it shouldXmlSerializer 的行为不像我认为的那样
【发布时间】:2009-09-21 18:21:43
【问题描述】:

我使用 XmlSerializer 已经很多年了,没有任何问题。我开始了一个新项目,并且我制作了扩展列表的课程。当我去序列化数据时,我丢失了我添加到我的类中的属性。显然,我可以通过改变我的班级来解决这个问题,这样它就不再扩展 List 了。我真的只是想知道为什么 XmlSerializer 会忽略 List 上的属性。

var data = new Data { Number = 3 };
data.AddRange(Enumerable.Range(5, 5));
var serializer = new XmlSerializer(typeof(Data));
var memoryStream = new MemoryStream();
serializer.Serialize(memoryStream, data);
memoryStream.Position = 0;
var dataSerialized = new StreamReader(memoryStream).ReadToEnd();

public class Data : List<int>
{
    public int Number
    {
        get;
        set;
    }
}

dataSerialized 上面的代码 sn-p 之后看起来像这样(它缺少 'Number' 属性):

<?xml version="1.0"?>
<ArrayOfInt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <int>5</int>
  <int>6</int>
  <int>7</int>
  <int>8</int>
  <int>9</int>
</ArrayOfInt>

【问题讨论】:

    标签: c# xml-serialization


    【解决方案1】:

    这是设计使然,基本上决定将集合作为数组而不是作为具有成员的类来处理,因此集合看起来像在线上的数组,因此它们除了集合项之外没有任何成员,并且可以是“通过将 [XmlElement] 添加到 ICollection 类型的成员来进行扁平化”。

    您可以做的是实现 IXmlSerializable 并进行自定义序列化,但我个人更喜欢 DataContract 方式。

    【讨论】:

      【解决方案2】:

      查看接受的答案to one of my own questions(忽略问题本身,因为它完全没有抓住重点)。 XmlSerializer 只会序列化 Collection 的 Items 集合,而不是其属性。

      【讨论】:

        猜你喜欢
        • 2011-09-29
        • 1970-01-01
        • 2021-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-11
        • 2017-07-05
        相关资源
        最近更新 更多