t3c*_*b0t 5 c# json json.net json-deserialization
我正在尝试反序列化代表此类的json文件的一部分.
public class Command
{
[JsonRequired]
public string Name { get; set; }
[DefaultValue("Json!")]
public string Text { get; set; }
//[DefaultValue(typeof(Dictionary<string, string>))]
public Dictionary<string, string> Parameters { get; set; } = new Dictionary<string, string>();
}
Run Code Online (Sandbox Code Playgroud)
其中两个属性是可选的:Text和Parameters.我希望它们填充默认值.
问题是我无法弄清楚如何使它适用于它们.
DefaultValueHandling.Populate选项,Text则将填充但Parameters仍然存在null.DefaultValueHandling.Ignore那么它将是另一种方式.[DefaultValue(typeof(Dictionary<string, string>))]在Parameters房产上设置它会崩溃.Quesiton:有没有办法让它适用于所有物业?
我希望它不是null,所以我不必在代码的其他部分检查它.
我尝试过的演示:
void Main()
{
var json = @"
[
{
""Name"": ""Hallo"",
""Text"": ""Json!""
},
{
""Name"": ""Hallo"",
}
]
";
var result = JsonConvert.DeserializeObject<Command[]>(json, new JsonSerializerSettings
{
DefaultValueHandling = DefaultValueHandling.Populate,
ObjectCreationHandling = ObjectCreationHandling.Reuse
});
result.Dump(); // LINQPad
}
Run Code Online (Sandbox Code Playgroud)
不要通过设置指定全局DefaultValueHandling,而是使用 [JsonProperty]属性DefaultValueHandling根据需要为每个单独的属性进行设置:
public class Command
{
[JsonRequired]
public string Name { get; set; }
[DefaultValue("Json!")]
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)]
public string Text { get; set; }
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)]
public Dictionary<string, string> Parameters { get; set; } = new Dictionary<string, string>();
}
Run Code Online (Sandbox Code Playgroud)
然后,像这样反序列化:
var result = JsonConvert.DeserializeObject<Command[]>(json);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
203 次 |
| 最近记录: |