"{
\"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])才能正确反序列化。
这是越来越晚了,完全不是指如何正确编写该类
答案 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(和错误消息); Email
和Password
需要一个字符串数组。 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; }
}
但是,从上下文来看,Email
和Password
可能是指正在验证的输入项,并且结果可能包含其他项,例如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,或反序列化为具体类