JSON.Net 将内部对象转换为 C# 模型

6

我从远程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);

这很有效 - 当我需要调用API 50次,并且不想为每个调用创建第二个“Container”时,我的问题就出现了。有没有一种方法可以将上面的示例直接绑定到TicketModel?

如果您需要在每个 API 调用之间进行反序列化,那么真的没有什么办法。您可以在 50 个 API 调用返回后批量反序列化。 - Sam Leach
嗨@SamLeach,我有50个不同的API调用,所以不是调用的数量,而是创建容器模型只是为了反序列化而没有任何用处的痛苦! - LiamB
3个回答

1
使用Newtonsoft的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
你可以这样做:

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>();

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);

所以你不需要任何模型。


嗨,Sam,我无法修改JSON,因为它是外部API。-已更新问题以澄清。 - LiamB
为什么不呢?如果返回的是Json,你可以随心所欲地处理它。 - Sam Leach

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接