[DataContract]
public class MyClass
{
[DataMember]
private string PrivateFiled;
// Other properties elided.
...
}
PrivateFiled
如何在序列化/反序列化时由DataContractSerializer
设置,它如何能够访问私有变量。引擎盖下发生了什么?这背后的概念是什么?另请指出一些有用的资料。
答案 0 :(得分:2)
您可以通过.NET reflection API访问非公开会员。出于这个原因,虽然公共/私人/内部修饰符意味着某种安全性,但它们实际上应该被认为是组织性的,因为它们很容易被反思所绕过。
答案 1 :(得分:1)
它正在使用反射。您可以使用它来枚举类中的每个字段,甚至是私有字段,您也可以设置它们或获取它们的值。
序列化程序查看在类,字段和属性上设置的属性,如果它找到特定属性,在DataMember
,它知道它必须序列化/反序列化它。
这里有关属性: http://msdn.microsoft.com/en-us/library/z919e8tw.aspx
以及关于设置私有字段的内容: Is it possible to set private property via reflection?