在Json.Net的私人设置
我知道有一个属性来处理私人设置,但我想要这种行为作为默认,有没有办法实现这一点?除了调整源。将是伟大的,如果有一个设置为此。
更新,新的答案
我写了一个源分布NuGet为此,安装一个单一文件与两个自定义合同解析器: > PrivateSetterContractResolver 安装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 repo: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/ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |