我正在使用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
}
]
你知道我该怎么做吗?
3条答案
按热度按时间d6kp6zgx1#
您没有在JSON字符串中指定
eId
,它被设置为必需。你通过了rId
...这是一样的吗?如果我不明白问题,请让我知道,我会更新我的答案。
UPDATE:表示
iSd
属性为AllowNull
。您仍然需要在JSON字符串中为该属性指定一个值,但它可以为null。根据JSON.NET specs:属性必须以JSON定义,但可以是空值。
您需要为
iSd
...指定一个值,或者在JsonProperty
属性中将iSd
标记为DefaultValue
。对于DefaultValue
,spec表示:属性不是必需的。默认状态。
希望这能帮上忙。
zf2sa74q2#
我为
Required
枚举值及其基于theRequired
documentation的效果做了一个小表:| 选择权|必须在场|可以为Null值|
| - -----|- -----|- -----|
|
Required.Default
||✓||
Required.AllowNull
| ✓| ✓||
Required.Always
| ✓|||
Required.DisallowNull
|||在您的情况下,
isD
是可选的,您应该使用Required.Default
(或Required.DisallowNull
)。使用Required.AllowNull
也使得isD
成为强制性的,因此当它丢失时会抛出Exception。请注意,在这种情况下,区分“Optional and may be null”(
Required.Default
)或“Optional but may not null”(Required.DisallowNull
)是没有意义的,因为bool
是一个不能为null的值类型。如果你想允许空值,你需要使用一个可空值类型(bool?
),但是默认值(当该值不存在时)将是null
,除非你手动设置它(例如false
):lyfkaqu13#
将属性设置为
bool
,而不是string
。