我正在使用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; }
}
Run Code Online (Sandbox Code Playgroud)
因此,即使通过某些项目在json字符串中没有属性"iSd",也可以对json进行反序列化,我希望如果不存在则应该填充该类型的默认值,例如,IsSelected应该为false,除了最后一项
[{
"eId" : "30022004",
"aId" : "1"
}, {
"eId" : "30021841",
"aId" : "1"
}, {
"eId" : "30021848",
"aId" : "1"
"iSd" : true
}
]
Run Code Online (Sandbox Code Playgroud)
知道我怎么能实现这个目标?
Dav*_*ter 11
您没有eId在JSON字符串中指定,并且将其设置为必需.你过世了rId......这是一回事吗?
如果我不理解这个问题,请告诉我,我会更新我的答案.
更新:您正在指示该iSd属性AllowNull.您仍然必须在JSON字符串中为此属性指定值,但它可以为null.根据JSON.NET 规范:
该属性必须以JSON定义,但可以为空值.
你需要指定一个值iSd...或标记iSd在你的JsonProperty属性为DefaultValue.因为DefaultValue,规范说:
该物业不是必需的.默认状态.
[JsonProperty(PropertyName = "iSd", Required = Required.Default)]
public bool IsSelected { get; set; }
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助.
我做了一个小桌子Required基于枚举值及其效果的Required文档:
| Must be present | Can be Null value
-----------------------+-----------------+------------------
Required.Default | | ?
-----------------------+-----------------+------------------
Required.AllowNull | ? | ?
-----------------------+-----------------+------------------
Required.Always | ? |
-----------------------+-----------------+------------------
Required.DisallowNull | |
Run Code Online (Sandbox Code Playgroud)
在您的情况下,isD您应该使用Required.Default(或Required.DisallowNull)是可选的。使用Required.AllowNull也使isD强制,因此当它丢失时抛出异常。
请注意,在这种情况下,区分Required.Default“可选但可能为空”( ) 或“可选但可能不为空”( Required.DisallowNull)bool是没有意义的,因为是一个不能为空的值类型。如果您想允许空值,您需要使用可空值类型 ( bool?),但是,默认值(当该值不存在时)将为null,除非您手动设置它(例如为false):
[JsonProperty(PropertyName = "iSd", Required = Required.Default)]
public bool? IsSelected { get; set; } = false;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14971 次 |
| 最近记录: |