json.net需要在json中找不到的属性
我正在使用Json.net,我得到了一个类如下
public class RecordAlias { [JsonProperty(PropertyName = "eId", Required = Required.Always)] public string EntityId { get; set; } [JsonProperty(PropertyName = "aId", Required = Required.AllowNull)] public string AliasId { get; set; } [JsonProperty(PropertyName = "iSd", Required = Required.AllowNull)] public bool IsSelected { get; set; } }
因此,即使通过某些项目在json字符串中没有属性“iSd”,也可以对json进行反序列化,我希望如果不存在,则应该填充该类型的默认值,例如,IsSelected应该为false,除了最后一项
[{ "eId" : "30022004", "aId" : "1" }, { "eId" : "30021841", "aId" : "1" }, { "eId" : "30021848", "aId" : "1" "iSd" : true } ]
知道我怎么能实现这个目标?
您没有在JSON字符串中指定eId
,并且将其设置为必需。 你正在通过rId
……这是一回事吗?
如果我不理解这个问题,请告诉我,我会更新我的答案。
更新 :您指示iSd
属性是AllowNull
。 您仍然必须在JSON字符串中为此属性指定值,但它可以为null。 根据JSON.NET 规范 :
该属性必须以JSON定义,但可以为空值。
您需要为iSd
…指定一个值,或在JsonProperty
属性中将JsonProperty
标记为DefaultValue
。 对于DefaultValue
, 规范说:
该物业不是必需的。 默认状态。
[JsonProperty(PropertyName = "iSd", Required = Required.Default)] public bool IsSelected { get; set; }
我希望这有帮助。
使属性成为bool
而不是string
。
我根据Required
文档为Required
枚举值及其效果创建了一个小表:
| Must be present | Can be Null value -----------------------+-----------------+------------------ Required.Default | | ✓ -----------------------+-----------------+------------------ Required.AllowNull | ✓ | ✓ -----------------------+-----------------+------------------ Required.Always | ✓ | -----------------------+-----------------+------------------ Required.DisallowNull | |
在您的情况下, isD
是可选的,您应该使用Required.Default
(或Required.DisallowNull
)。 使用Required.AllowNull
也会使isD
必需项,因此它会在缺少时抛出exception。
请注意,在这种情况下,区分“Optional和可能为null”( Required.Default
)或“Optional但可能不为null”( Required.DisallowNull
)是没有意义的,因为bool
是一个不能为null的值类型。 如果要允许空值,则需要使用可空值类型( bool?
),但是默认值(当值不存在时)将为null
,除非您手动设置它(例如为false
):
上述就是C#学习教程:json.net需要在json中找不到的属性分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
[JsonProperty(PropertyName = "iSd", Required = Required.Default)] public bool? IsSelected { get; set; } = false;
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1025893.html