C# 如何使用默认值填充可选集合属性?

C# 如何使用默认值填充可选集合属性?,c#,json,json.net,json-deserialization,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 Dicti

我正在尝试反序列化表示该类的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>();
}

不要通过设置指定全局
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>();
}
公共类命令
{
[JsonRequired]
公共字符串名称{get;set;}
[DefaultValue(“Json!”)]
[JsonProperty(DefaultValueHandling=DefaultValueHandling.Populate)]
公共字符串文本{get;set;}
[JsonProperty(DefaultValueHandling=DefaultValueHandling.Ignore)]
公共字典参数{get;set;}=new Dictionary();
}
然后,像这样反序列化:

var result = JsonConvert.DeserializeObject<Command[]>(json);
var result=JsonConvert.DeserializeObject(json);

当它在字典上崩溃时,您遇到了什么异常?我想知道这是否是因为你需要实例化一些东西,而不仅仅是声明一个类型?@BenHall它说:
无法从System.RuntimeType强制转换或转换为System.Collections.Generic.Dictionary'2[System.String,System.String]。
但我刚刚注意到我使用了错误的重载,有一个类似于
type,字符串
这让我也陷入了困境,因为我不相信可以从字符串创建字典。我尝试了其他组合,它们也能工作。例如,我可以全局设置
Populate
,并对特定属性设置
Ignore
,这样我就不必装饰所有属性,而只需装饰集合类型。是的,如果您有许多属性,并且您希望大多数属性以一种方式工作,但只有少数属性以另一种方式工作,那么这是一个更好的解决方案。
var result = JsonConvert.DeserializeObject<Command[]>(json);