如何反序列化JSON Api结果

时间:2019-05-30 10:22:50

标签: c# json

我认为这是Api的结果。我不知道哪个班级需要对此进行反讽。 enter image description here

"{
  \"errors\":{\"Email\": [\"This field should be filled in\"],
            \"Password\": [\"This field should be filled in\"]},
  \"title\":\"One or more validation errors occurred.\",
  \"status\":400,
  \"traceId\":\"8000006c-0002-fe00-b63f-84710c7967bb\"
}"

我编写此类反序列化

public class Content
{
    public List<Error> Errors { get; set; }
    public string Tutle { get; set; }
    public int Status { get; set; }
    public string TraceId { get; set; }
}

public class Error
{
    public string Email { get; set; }
    public string Password { get; set; }
}
  

Newtonsoft.Json.JsonSerializationException:'无法反序列化当前JSON对象(例如{“ name”:“ value”})为类型'System.Collections.Generic.List`1 [AppStore.WPF.Services.Helpers.Error ]”,因为该类型需要JSON数组(例如[1,2,3])才能正确反序列化。

这是越来越晚了,完全不是指如何正确编写该类

2 个答案:

答案 0 :(得分:2)

您正在尝试使用:

public List<Error> Errors { get; set; }

public class Error
{
    public string Email { get; set; }
    public string Password { get; set; }
}

反序列化:

\"errors\":{\"Email\": [\"This field should be filled in\"],
        \"Password\": [\"This field should be filled in\"]},

仔细查看JSON(和错误消息); EmailPassword需要一个字符串数组。 API的假设响应可能类似于:

\"errors\":{\"Email\": [\"This field should be filled in\"],
        \"Password\": [\"Password must be at least 8 characters\",
                      \"Password must contain at least one digit\"]
},

第一个更正此错误的尝试可能是:

public class Error
{
    public string[] Email { get; set; }
    public string[] Password { get; set; }
}

但是,从上下文来看,EmailPassword可能是指正在验证的输入项,并且结果可能包含其他项,例如PhoneNumber

\"errors\":{\"Email\": [\"This field should be filled in\"],
        \"Password\": [\"This field should be filled in\"],
        \"PhoneNumber\": [\"This field should be filled in\"]
},

,因此您确实希望将其反序列化为字典,即替换:

public List<Error> Errors { get; set; }

作者:

public Dictionary<string, string[]> Errors {get; set; }

答案 1 :(得分:-1)

您可以使用JSON.NET。 这里有很多信息: https://www.newtonsoft.com/json/help/html/SerializingJSON.htm

您可以使用动态JObject,或反序列化为具体类