2
[DataContract]
public class MyClass
{
    [DataMember]
    private string PrivateFiled;

    // Other properties elided.
    ...
}

PrivateFiled序列化/反序列化时如何设置它,DataContractSerializer它如何能够访问私有变量。引擎盖下发生了什么?这背后的概念是什么。还请指出一些很好的来源。

4

2 回答 2

2

您可以通过.NET 反射 API访问非公共成员。出于这个原因,尽管 public/private/internal 修饰符意味着某种安全性,但它们实际上应该被视为具有组织性,因为它们很容易被反射规避。

于 2013-07-25T13:20:14.573 回答
1

它使用反射。您可以使用它枚举类中的每个字段,甚至是私有字段,您还可以设置它们或获取它们的值。

序列化程序查看在类上设置的属性、它的字段和属性,如果它找到一个特定的属性,在这里DataMember,它知道它必须序列化/反序列化它。

这里关于属性:http: //msdn.microsoft.com/en-us/library/z919e8tw.aspx

在这里关于设置私有字段: 是否可以通过反射设置私有属性?

于 2013-07-25T13:21:08.847 回答