我正在使用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
}
]
我知道如何实现这一目标?
答案 0 :(得分:10)
您没有在JSON字符串中指定eId
,并且将其设置为必需。你正在通过rId
......这是一回事吗?
如果我不理解这个问题,请告诉我,我会更新我的答案。
<强>更新强>:
您指出iSd
属性为AllowNull
。您仍然必须在JSON字符串中为此属性指定值,但它可以为null。根据JSON.NET specs:
该属性必须以JSON定义,但可以为空值。
您需要在iSd
属性中指定iSd
...或标记JsonProperty
为DefaultValue
。对于DefaultValue
,spec说:
该物业不是必需的。默认状态。
[JsonProperty(PropertyName = "iSd", Required = Required.Default)]
public bool IsSelected { get; set; }
我希望这会有所帮助。
答案 1 :(得分:1)
将属性设为bool
而不是string
。
答案 2 :(得分:0)
我根据the Required
documentation为Required
枚举值及其效果制作了一个小表:
| Must be present | Can be Null value
-----------------------+-----------------+------------------
Required.Default | | ✓
-----------------------+-----------------+------------------
Required.AllowNull | ✓ | ✓
-----------------------+-----------------+------------------
Required.Always | ✓ |
-----------------------+-----------------+------------------
Required.DisallowNull | |
在您的情况下,isD
是可选的,您应该使用Required.Default
(或Required.DisallowNull
)。使用Required.AllowNull
也会使isD
成为强制性的,因此在它丢失时会抛出异常。
请注意,在这种情况下,区分&#34; Optional并且可能为null&#34;是没有意义的。 (Required.Default
)或&#34;可选但不得为空&#34; (Required.DisallowNull
)因为bool
是一个不能为null的值类型。如果要允许空值,则需要使用可空值类型(bool?
),但是默认值(当值不存在时)将为null
,除非您手动设置它(例如false
):
[JsonProperty(PropertyName = "iSd", Required = Required.Default)]
public bool? IsSelected { get; set; } = false;