私有变量的XML序列化

时间:2011-09-02 10:50:32

标签: c# xml-serialization

我是XML序列化的新手,我读过private变量在公共属性下给出之前无法序列化。但是在反序列化后进行调试时,我也可以在反序列化对象中找到私有变量。有人可以解释一下吗?这是我的代码:

class Program
{
    static void Main(string[] args)
    {
        XmlSerializer xs = new XmlSerializer(typeof(Nokia));
        Nokia n = new Nokia();

        using (Stream s = new FileStream("XMLFile", FileMode.Create, FileAccess.Write, FileShare.None))
        {
            xs.Serialize(s, n);
        }

        XmlSerializer xs1 = new XmlSerializer(typeof(Nokia));
        using (Stream ds = File.OpenRead("XMLFile"))
        {
            Nokia dn = (Nokia)xs1.Deserialize(ds);
        }
    }
}

public class Mobile
{
    public int Height = 10;
    private int weight = 20;
    public Mobile() {}
}

public class Nokia : Mobile
{
    public string Signal = "Poor";
    public Nokia() {}
}

在反序列化后快速观察对象时进行调试时,我能够在基础中找到变量weight。这怎么可能?或者我在其他地方错了吗?

1 个答案:

答案 0 :(得分:5)

私有变量仍然存在于反序列化对象中,但它们的值不会存储在XML序列化版本中。

为了演示这一点,如果您创建对象的实例,请更改weight值,然后将其序列化为XML。如果对其进行反序列化,则反序列化对象中weight的值将是默认值,而不是原始对象上设置的值。