在Json.Net的私人设置

前端之家收集整理的这篇文章主要介绍了在Json.Net的私人设置前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我知道有一个属性来处理私人设置,但我想要这种行为作为默认,有没有办法实现这一点?除了调整源。将是伟大的,如果有一个设置为此。
更新,新的答案

我写了一个源分布NuGet为此,安装一个单一文件与两个自定义合同解析器:

> PrivateSetterContractResolver
> PrivateSetterCamelCasePropertyNamesContractResolver

安装NuGet:

  1. Install-Package JsonNet.PrivateSettersContractResolvers.Source

然后只需使用任何解析器:

  1. var settings = new JsonSerializerSettings
  2. {
  3. ContractResolver = new PrivateSetterContractResolver()
  4. };
  5.  
  6. var model = JsonConvert.DeserializeObject<Model>(json,settings);

你可以在这里阅读:http://danielwertheim.se/json-net-private-setters-nuget/

GitHub repo:https://github.com/danielwertheim/jsonnet-privatesetterscontractresolvers

旧答案(仍然有效)

有两个可以解决问题的选择。

Alt 1:在解串器上

  1. ContractResolver.DefaultMembeRSSearchFlags =
  2. DefaultMembeRSSearchFlags | BindingFlags.NonPublic;

默认序列化选项支持所有类型的成员。因此,此解决方案将返回所有私有成员类型,包括字段我只有兴趣也支持私人套件。

Alt2:创建自定义ContractResolver:

因此,这是更好的选择,因为我们只是检查属性

  1. public class SisoJsonDefaultContractResolver : DefaultContractResolver
  2. {
  3. protected override JsonProperty CreateProperty(
  4. MemberInfo member,MemberSerialization memberSerialization)
  5. {
  6. //TODO: Maybe cache
  7. var prop = base.CreateProperty(member,memberSerialization);
  8.  
  9. if (!prop.Writable)
  10. {
  11. var property = member as PropertyInfo;
  12. if (property != null)
  13. {
  14. var hasPrivateSetter = property.GetSetMethod(true) != null;
  15. prop.Writable = hasPrivateSetter;
  16. }
  17. }
  18.  
  19. return prop;
  20. }
  21. }

有关更多信息,请阅读我的帖子:http://danielwertheim.se/json-net-private-setters/

猜你在找的Json相关文章