我从远程API返回以下JSON(我无法修改返回的JSON)
{
"APITicket": {
"location": "SOMEVALUE",
"ticket": "SOMEVALUE"
}
}
现在使用JSON.Net将其转换为模型我必须创建2个模型。
public class TicketModel
{
public string location { get; set; }
public string ticket { get; set; }
}
public class TicketContainer
{
public TicketModel APITicket { get; set; }
}
并做类似的事情。
var myObject = JsonConvert.DeserializeObject<TicketContainer>(this.JSONResponse);
这很有效 - 当我有大约50次调用API并且真的不想为每个调用创建第二个“容器”时,我的问题就出现了。有没有办法将上面的例子直接绑定到TicketModel?
答案 0 :(得分:1)
在反序列化之前使用Newtonsoft's JArray
自定义您的json
public List<APITicket> JsonParser(string json)
{
Newtonsoft.Json.Linq.JArray jArray = Newtonsoft.Json.Linq.JArray.Parse(json);
var list = new List<APITicket>();
foreach(var item in jArray)
{
list.Add(
new APITicket { location = item["APITicket"]["location"],
ticket = item["APITicket"]["ticket"]
}
);
}
return list;
}
答案 1 :(得分:1)
你可以这样做:
var json = @"
{
'APITicket': {
'location': 'SOMEVALUE',
'ticket': 'SOMEVALUE'
}
}";
//Parse the JSON:
var jObject = JObject.Parse(json);
//Select the nested property (we expect only one):
var jProperty = (JProperty)jObject.Children().Single();
//Deserialize it's value to a TicketModel instance:
var ticket = jProperty.Value.ToObject<TicketModel>();
答案 2 :(得分:0)
修改JSON,使其看起来像这样
{
"location": "SOMEVALUE",
"ticket": "SOMEVALUE"
}
并做
List<TicketModel> tickets = JsonConvert.DeserializeObject<List<TicketModel>>(this.JSONResponse);
甚至
Dictionary<string, string> tickets = JsonConvert.DeserializeObject<Dictionary<string, string>>(this.JSONResponse);
因此您不需要任何模型。