Json.NET をカスタマイズして、プライベート メンバーをシリアル化し、パブリックの読み取り専用プロパティをシリアル化しないようにするにはどうすればよいですか (属性を使用せずに)。
私はカスタムを作成することに苦労しましたIContractResolver
が、少し迷っています.
部分的な答えについては、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例外が生成されるようです。