私人会员的DataMember属性 - 发生在幕后的事情

时间:2013-07-25 13:14:27

标签: c# datacontractserializer

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

    // Other properties elided.
    ...
}

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

2 个答案:

答案 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?