2013-07-10 3 views
6

У меня есть следующие JSON, возвращаясь из удаленного API (я не могу модифицировать JSON вернулся)JSON.Net Преобразовать внутренний объект C# Модель

{ 
    "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

Если вам нужно deserialise между каждым вызовом API, то нет действительно никакого способа вокруг этого. Вы можете выполнить десериализацию после возврата 50 вызовов API. –

+0

Привет @SamLeach У меня есть 50 различных вызовов API, поэтому это не количество звонков, а просто боль в создании моделей контейнеров, которые просто не полезны ни для чего, кроме Deserialize! – LiamB

ответ

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

Измените 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); 

так что вам не нужны никакие модели.

+0

Привет Сэм, я не могу изменить JSON, поскольку это внешний API. - Обновлен вопрос для уточнения. – LiamB

+0

Почему бы и нет? Если он будет возвращен Json, вы можете делать с ним все, что хотите. –

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; 
    } 
Смежные вопросы