【问题标题】:Are all public read/write members serialized with XmlSerializer?是否所有公共读/写成员都使用 XmlSerializer 序列化?
【发布时间】:2011-02-08 21:23:51
【问题描述】:

我有一些公共读/写成员没有被序列化,我不知道为什么。查看一些代码,我的根类被标记为可序列化:

[Serializable]
public class MyClass

我有一个默认构造函数,它初始化 10-15 个string 成员。 MyClass 中大约有 50 个公共读/写字符串成员,它们带有 get 和 set——没有在其中任何一个上设置显式序列化属性。序列化看起来像这样:

XmlSerializer x = new XmlSerializer(typeof(MyClass));
TextWriter twWriter = new StreamWriter(sFileName);
x.Serialize(twWriter, this);
twWriter.Close();

这些成员中只有少数(20-30 个)实际上被序列化到我的 xml 文件中。我对XmlSerializer 课程有什么遗漏或误解?

【问题讨论】:

  • 未序列化的字段有哪些类型?例如XmlSerializer 不序列化哈希表
  • 如果它们为空,是否会被跳过?

标签: c# .net xml serialization


【解决方案1】:

您可以通过在XmlElement 属性上将IsNullable 设置为true 来强制在输出中序列化null 属性。

public class Example
{
    [XmlElement(IsNullable=true)]
    public string Text { get; set; }
}

Text 属性现在将被序列化为 <Text xsi:nil="true" />

附带说明,如果您只进行 XML 序列化,则不需要 [Serializable] 属性。

【讨论】:

    【解决方案2】:

    确实,如果它们为空,它们不会被序列化。

    【讨论】:

      猜你喜欢
      • 2013-06-23
      • 2010-12-06
      • 1970-01-01
      • 2010-10-09
      • 1970-01-01
      • 2016-11-23
      • 2022-12-17
      • 2020-04-12
      • 1970-01-01
      相关资源
      最近更新 更多