5

personという非常に単純なクラスがあります。

public class Person{
   [DataMember(Name="MyName")]
   public string Name { get;set;}
}

シリアライズまたはデシリアライズしようとすると、すべてうまくいきます。XML には「MyName」というタグがあり、オブジェクトには VS Intellisense で Name というプロパティがあります。

ここで必要なのは、オブジェクトからシリアル化されたプロパティの名前にアクセスすることです。

たとえば、私はできますobject.GetType().GetProperty("Name");が、私がやろうとするobject.GetType().GetProperty("MyName")と、リフレクションはプロパティが存在しないと言います. プロパティのシリアル化された名前を読み取るにはどうすればよいですか? 方法はありますか?

4

1 に答える 1

3

唯一の方法は、リフレクションを使用して、次の方法でプロパティの属性にアクセスすることです。

var att = myProperty.GetType().GetAttributes();
var attribute = property.GetCustomAttributes(false)[0] as DataMemberAttribute;
Console.WriteLine(attribute.Name);

これは、オブジェクトをシリアル化および逆シリアル化する必要なしに、クライアントとサーバーの両方で機能します。

于 2010-01-18T20:34:43.077 に答える