栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Json.Net中的私人二传手

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Json.Net中的私人二传手

更新,新答案

我为此编写了一个源码分发版NuGet,它安装了带有两个自定义合同解析器的单个文件:

  • PrivateSetterContractResolver
  • PrivateSetterCamelCasePropertyNamesContractResolver

安装NuGet:

Install-Package JsonNet.PrivateSettersContractResolvers.Source

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

var settings = new JsonSerializerSettings{    ContractResolver = new PrivateSetterContractResolver()};var model = JsonConvert.DeserializeObject<Model>(json, settings);
您可以在这里阅读有关内容:http
//danielwertheim.se/json-net-private-setters-
nuget/

GitHub回购:https : //github.com/danielwertheim/jsonnet-
privatesetterscontractresolvers

旧答案(仍然有效)

有两种替代方法可以解决此问题。

Alt 1:在反序列化器上

ContractResolver.DefaultMembersSearchFlags =       DefaultMembersSearchFlags | BindingFlags.NonPublic;

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

Alt2:创建一个自定义ContractResolver:

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

public class SisoJsonDefaultContractResolver : DefaultContractResolver {    protected override JsonProperty CreateProperty(        MemberInfo member,        MemberSerialization memberSerialization)    {        //TODO: Maybe cache        var prop = base.CreateProperty(member, memberSerialization);        if (!prop.Writable)        { var property = member as PropertyInfo; if (property != null) {     var hasPrivateSetter = property.GetSetMethod(true) != null;     prop.Writable = hasPrivateSetter; }        }        return prop;    }}

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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/506767.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号