16

Json.NET をカスタマイズして、プライベート メンバーをシリアル化し、パブリックの読み取り専用プロパティをシリアル化しないようにするにはどうすればよいですか (属性を使用せずに)。

私はカスタムを作成することに苦労しましたIContractResolverが、少し迷っています.

4

2 に答える 2

12

部分的な答えについては、DefaultContractResolver.DefaultMembersSearchFlagsをいじると、プライベートなものが含まれるようになります。

Newtonsoft.Json.JsonSerializerSettings jss = new Newtonsoft.Json.JsonSerializerSettings();

if (includePrivateMembers)
{
    Newtonsoft.Json.Serialization.DefaultContractResolver dcr = new Newtonsoft.Json.Serialization.DefaultContractResolver();
    dcr.DefaultMembersSearchFlags |= System.Reflection.BindingFlags.NonPublic;
    jss.ContractResolver = dcr;
}

return Newtonsoft.Json.JsonConvert.SerializeObject(o, jss);

多くのオブジェクトで機能するようですが、一部のオブジェクトではCLR例外が生成されるようです。

于 2013-02-08T20:43:53.157 に答える