我目前正在使用Json.Net来反序列化我的JSON。我现在有以下情况:
我收到以下JSON响应:
{"Success":false,"Errors":{"UserName":"User Name already registered","EmailAddress":"Email Address already registered"}}
我想将它解析为这种类型:
public class CustomJsonResult
{
public bool Success { get; set; }
public string[] Errors { get; set; }
}
使用Json.net,我尝试这样做:
CustomJsonResult regResult = JsonConvert.DeserializeObject<CustomJsonResult>(json);
但这不起作用,我收到错误无法将JSON对象反序列化为'System.String []'类型。
我该如何解决这个问题? (使用Json.Net或任何其他库)
答案 0 :(得分:3)
Errors
不是一个字符串数组,它是一个object
,UserName
和EmailAddress
属性。
{
"Success":false,
"Errors":{
"UserName":"User Name already registered",
"EmailAddress":"Email Address already registered"
}
}
好吧,您可以创建另一个类来存储错误消息
public CustomJsonError
{
public string UserName { get; set; }
public string EmailAddress { get; set; }
}
然后重构类
public class CustomJsonResult
{
public bool Success { get; set; }
public CustomJsonError Errors { get; set; } // I'm not sure if the property should be named as Errors
}
BTW,错误是否包含数组/错误列表?
<强>更新强>
好吧,您可以使用Dictionary<string, string>
(请参阅其他答案)或为错误创建自定义类。有关对JSON进行序列化和反序列化Collection的信息,请参阅http://james.newtonking.com/projects/json/help/SerializingCollections.html。
答案 1 :(得分:3)
问题是你正在尝试将字典转换为数组。尝试将string[]
替换为Dictionary<string, string>
。
答案 2 :(得分:1)
那是因为你的JSON中的“错误”与它试图反序列化的错误不匹配。它应该是这样的:
public class CustomJsonResult
{
public bool Success { get; set; }
public ErrorType[] Errors { get; set; }
}
public class ErrorType
{
public string UserName {get;set;}
public string EmailAddress {get;set;}
}
如果要更改要匹配的JSON,它应如下所示:
{"Success":false, "Errors": ["User Name already registered", "Email Address already registered"]}
否则您可能需要一些中间映射。
答案 3 :(得分:1)
使用标准.NET框架库System.Web.Extensions:
中的JavaScriptSerializerusing System;
using System.Collections.Generic;
using System.Web.Script.Serialization;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var dict = new JavaScriptSerializer().Deserialize<Dictionary<string,int>>("{ a: 1, b: 2 }");
Console.WriteLine(dict["a"]);
Console.WriteLine(dict["b"]);
Console.ReadLine();
}
}
}