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 に答える