我如何填充具有默认值的可选收集属性



我正在尝试对代表此类的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>();
}

其中两个属性是可选的:TextParameters。我希望它们被默认值填充。

问题是我无法弄清楚如何使其对他们俩有效。

  • 如果我使用DefaultValueHandling.Populate选项,则Text将被填充,但Parameters仍然是null
  • 如果我使用 DefaultValueHandling.Ignore,那将是相反的方式。
  • 如果我在Parameters属性上设置[DefaultValue(typeof(Dictionary<string, string>))],它将崩溃。

quesiton :有没有办法使其适用于所有属性?

我想让它不要挂用,这样我就不必在代码的其他部分中检查它。


我尝试过的演示:

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
}

,而不是通过设置指定全局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>();
}

然后,这样的审理:

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

相关内容

  • 没有找到相关文章

最新更新