我是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
。这怎么可能?或者我在其他地方错了吗?
答案 0 :(得分:5)
私有变量仍然存在于反序列化对象中,但它们的值不会存储在XML序列化版本中。
为了演示这一点,如果您创建对象的实例,请更改weight
值,然后将其序列化为XML。如果对其进行反序列化,则反序列化对象中weight
的值将是默认值,而不是原始对象上设置的值。