当前位置: 首页 > 编程语言 > C#

Json.NET根据属性类型生成所需属性share

时间:2023-04-10 19:03:22 C#

Json.NET根据属性类型生成所需属性所有属性,除非属性具有特定类型。下面是我正在尝试实现的示例:让我们确保我具有以下类型:classFooType={intId{get;set;};字符串名称{get;set;};可为空可选{get;set;};我想要做的是返回一个错误,如果Id或Name属性在json对象中丢失,但是如果Optional丢失,它反序列化没有错误(所以基本上根据需要设置属性不需要它)。我可以使用此示例中的RequireObjectPropertiesContractResolver标记所有属性:https:RequireObjectPropertiesContractResolver但不幸的是我无法构建更动态的东西。我也有可选类型的默认转换器,我希望将其添加到序列化中。它不是这个特定问题的一部分,但如果您知道如何根据需要标记属性或在一个地方使用自定义转换器,它可能会更大。您可以将来自Json.NET的合同解析器与反序列化的所有属性以及使用反射的答案中的逻辑结合起来,以查找该属性是否是pswg的选项类型,以标记除可选成员之外的所有成员:typeRequireObjectPropertiesContractResolver()=inheritDefaultContractResolver()覆盖this.CreateObjectContract(objectType:Type)=letcontract=base.CreateObjectContract(objectType)contract.ItemRequired(Required.Always);合同覆盖this.CreateProperty(memberInfo:MemberInfo,memberSerialization:MemberSerialization)=letproperty=base.CreateProperty(memberInfo,memberSerialization);//https://stackoverflow.com/questions/20696262/reflection-to-find-out-if-property-is-of-option-type让isOption=property.PropertyType.IsGenericType&&property.PropertyType.GetGenericTypeDefinition()=typedefof>ifisOptionthen(property.Required(NullValueHandling.Ignore))property然后,反序列化如下:letsettings=newJsonSerializerSettings()settings.ContractResolver(inputJson,settings):101,"name":"John"}可以反序列化,但是字符串{"id":101}不行。以上就是C#学习教程:Json.NET根据属性类型把属性做成必须的。分享的所有内容,如果对大家有用,需要进一步了解C#学习教程,希望大家多加关注——本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: