【问题标题】:DataMember attribute on private members - Whats happening under the hood私有成员的 DataMember 属性 - 幕后发生的事情
【发布时间】:2013-07-25 09:50:43
【问题描述】:
[DataContract]
public class MyClass
{
    [DataMember]
    private string PrivateFiled;

    // Other properties elided.
    ...
}

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

【问题讨论】:

    标签: c# datacontractserializer


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      序列化程序查看在类上设置的属性、其字段和属性,如果找到特定属性(此处为DataMember),它就知道必须对其进行序列化/反序列化。

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

      这里关于设置私有字段: Is it possible to set private property via reflection?

      【讨论】:

        猜你喜欢
        • 2010-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-15
        • 1970-01-01
        • 2013-01-18
        • 2013-02-15
        • 1970-01-01
        相关资源
        最近更新 更多