JSON 使用空字段反序列化#

JSON Deserialize with empty field c#

我正在用 c# 测试一些 api 调用并得到以下 JSON 响应:

{
  "message": "The request is invalid. Model validation failed.",
  "validationErrors": {
    "": {
      "reasons": [
        "A customer must be added to the order before it can be placed."
      ]
    }
  }
}

我想使用 JSON 解串器将此响应映射到 class,但我无法控制响应的形成方式。如何处理 validationErrors 中的空字段,以便我仍然可以访问对象中的原因列表?

注意:当我 运行 它通过 json2csharp 时,它在 validationErrors class.

中为该字段提供了这个不太有用的映射
public __invalid_type__ __invalid_name__ {get;set;}

反序列化为 Dictionary<string, ValidationError>:

public class ValidationError
{
    public List<string> reasons { get; set; }
}

public class RootObject
{
    public string message { get; set; }
    public Dictionary<string, ValidationError> validationErrors { get; set; }
}

这将与 and . If you are using DataContractJsonSerializer (tagged as ) you will need to set DataContractJsonSerializer.UseSimpleDictionaryFormat = true 开箱即用(仅限 .Net 4.5 及更高版本)。

如果您有自己的 class,您正在尝试取消实现,您可以尝试使用 Newtonsoft-Json 通过 [=] 配置您的 Json 属性 名称11=] 并将其设置为:

public class YourModel
{
    [JsonProperty(name = "")
    public ValidationErrors { get; set; }
}

此处有更多示例 - link

或者,您可以将 属性 解序列化为 Dictionary<string, YourErrorObject> 并使用第一个项目来访问错误。