代码之家  ›  专栏  ›  技术社区  ›  David Fox

是否所有公共读/写成员都使用XmlSerializer序列化?

  •  0
  • David Fox  · 技术社区  · 15 年前

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

    [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 班级?

    2 回复  |  直到 15 年前
        1
  •  3
  •   João Angelo    15 年前

    你可以强迫 null 通过设置在输出中序列化的属性 IsNullable true XmlElement 属性。

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

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

    在旁注中 [Serializable] 如果只执行XML序列化,则不需要属性。

        2
  •  0
  •   David Fox    15 年前

    实际上,如果它们为空,则不会序列化。