C#:创建类[Serializable]时会将哪些成员序列化为XML元素

时间:2018-11-21 06:05:58

标签: c# xml serialization xmlserializer

给出一个标记为[Serializable]的类,我们如何知道XmlSerializer是否将其成员序列化(该成员没有属性)?< / p>

例如:

[Serializable]
public class C2
{
    public int x1 = 1;
    private int x2 = 2;
    public static int x3 = 3;
    public readonly int x4 = 4;

    public int Y1 { get; set; }
    public static int Y2 { get; set; }
}

我们有一个类C2,在将新对象C2 c = new C2()序列化为XML字符串后,我发现只有x1Y1被序列化。因此,我推断

  1. public字段和属性将被序列化。
  2. private字段和属性不会被序列化。
  3. staticreadonly字段和属性不会被序列化。
  4. MethodInfo将不会序列化。
  5. ...

我的问题是,是否有任何准则可以知道:在不标记类成员任何属性的情况下,我们如何知道该成员将被序列化?

1 个答案:

答案 0 :(得分:1)

由于XML序列化不使用SerializableAttribute,因此在类上有或没有[Serializable]的情况下,将什么属性序列化为XML都没有区别(请参阅What is [Serializable] and when should I use it?,以了解使用它的原因)

您似乎已经正确地从Introducing XML Serialization中获得了序列化的列表:

  

XML序列化仅将对象的公共字段和属性值序列化为XML流。 XML序列化不包含类型信息。