Csharp/C#教程:json.net需要在json中找不到的属性分享


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

(0)
上一篇 2022年1月9日
下一篇 2022年1月9日

精彩推荐