[DataContract]
public class MyClass
{
[DataMember]
private string PrivateFiled;
// Other properties elided.
...
}
PrivateFiled
序列化/反序列化时如何设置它,DataContractSerializer
它如何能够访问私有变量。引擎盖下发生了什么?这背后的概念是什么。还请指出一些很好的来源。
[DataContract]
public class MyClass
{
[DataMember]
private string PrivateFiled;
// Other properties elided.
...
}
PrivateFiled
序列化/反序列化时如何设置它,DataContractSerializer
它如何能够访问私有变量。引擎盖下发生了什么?这背后的概念是什么。还请指出一些很好的来源。
您可以通过.NET 反射 API访问非公共成员。出于这个原因,尽管 public/private/internal 修饰符意味着某种安全性,但它们实际上应该被视为具有组织性,因为它们很容易被反射规避。
它使用反射。您可以使用它枚举类中的每个字段,甚至是私有字段,您还可以设置它们或获取它们的值。
序列化程序查看在类上设置的属性、它的字段和属性,如果它找到一个特定的属性,在这里DataMember
,它知道它必须序列化/反序列化它。
这里关于属性:http: //msdn.microsoft.com/en-us/library/z919e8tw.aspx
在这里关于设置私有字段: 是否可以通过反射设置私有属性?