我有一个JSON对象,附带一长串区号。不幸的是,每个区域代码都是Data对象列表中的对象名称。如何创建一个允许RestSharp反序列化内容的类?
以下是我班级现在的样子:
public class phaxioResponse
{
public string success { get; set; }
public string message { get; set; }
public List<areaCode> data { get; set; }
public class areaCode
{
public string city { get; set; }
public string state { get; set; }
}
}
这是JSON内容:
{
success: true
message: "277 area codes available."
data: {
201: {
city: "Bayonne, Jersey City, Union City"
state: "New Jersey"
}
202: {
city: "Washington"
state: "District Of Columbia"
} [...]
}
答案 0 :(得分:17)
由于这个JSON不是C#友好的,我不得不做一些hackery来使它正常出来。但是,结果非常好。
var json = JsonConvert.DeserializeObject<dynamic>(sampleJson);
var data = ((JObject)json.data).Children();
var stuff = data.Select(x => new { AreaCode = x.Path.Split('.')[1], City = x.First()["city"], State = x.Last()["state"] });
此代码将生成最能代表数据的匿名类型。但是,对于更正常的DTO类,匿名类型可以很容易地被ctor
替换。
输出看起来像这样:
答案 1 :(得分:3)
你的json是不正确的,但如果你纠正它,你可以使用像http://json2csharp.com/上的json-to-csharp工具来生成你的类:
public class __invalid_type__201
{
public string city { get; set; }
public string state { get; set; }
}
public class Data
{
public __invalid_type__201 __invalid_name__201 { get; set; }
}
public class RootObject
{
public bool success { get; set; }
public string message { get; set; }
public Data data { get; set; }
}
答案 2 :(得分:0)
我对RestSharp一无所知,但如果您在服务器端使用Newtonsoft,那么您只需将 JObject 传递给您的方法即可。然后你可以询问对象,看看它到底是什么类型的对象,并使用JObject.ToObject()来转换它。
答案 3 :(得分:0)
我认为使用output
是最简单的方法。
Dictionary<int,areaCode>
然后:
public class phaxioResponse
{
public string success { get; set; }
public string message { get; set; }
public Dictionary<int,areaCode> data { get; set; }
public class areaCode
{
public string city { get; set; }
public string state { get; set; }
}
}