2016-11-24 6 views
0

Я пытаюсь deserialise ответ от службы REST в C# сильно типизированных классов - однако я столкнулся с той же проблемой есть в этом посте: How do I output this JSON value where the key starts with a number?Анализировать JSON ответ, при котором объект начинается с числа в C#

Однако у меня возникла проблема с тем, что вы не можете запустить имя переменной в C# с числом - это означает, что класс на этом уровне просто десериализуется в null.

Мне нужно знать, как попасть в объекты и десериализовать их в классы C#.

Мой текущий код ниже:

public static async Task<T> MakeAPIGetRequest<T>(string uri) 
    { 
     Uri requestURI = new Uri(uri); 
     using (HttpClient client = new HttpClient()) 
     { 
      HttpResponseMessage responseGet = await client.GetAsync(requestURI); 
      if (responseGet.StatusCode != HttpStatusCode.OK) 
      { 
       throw new Exception(String.Format(
       "Server error (HTTP {0}: {1}).", 
       responseGet.StatusCode, 
       responseGet.Content)); 
      } 
      else 
      { 
      string response = await responseGet.Content.ReadAsStringAsync(); 
       T objects = (JsonConvert.DeserializeObject<T>(response)); 

       return objects; 
      } 
     } 
    } 

EDIT: Я не могу изменить способ службы толкая данные обратно

+0

размещает образец JSON. –

+2

Я думаю, что это поможет http://stackoverflow.com/questions/24218536/deserialize-json-that-has-some-property-name-starting-with-a-number – HebeleHododo

+0

@HebeleHododo Большое вам спасибо! –

ответ

0

правильный способ справиться с этим было использовать тег JsonProperty на целевых классах, чтобы определить, что Json свойство для прослушивания, как показано ниже (ссылки из https://stackoverflow.com/questions/24218536/deserialize-json-that-has-some-property-name-starting-with-a-number

public class MyClass 
{ 
    [JsonProperty(PropertyName = "24hhigh")] 
    public string Highest { get; set; } 
    ... 

Благодаря @HebeleHododo для комментария ответа

+0

как вы собираетесь это сделать для '[{'1': {'name': 'test', 'age': 'test'}}, {'2': {'name': 'another', 'age ':' another '}}] ' –

+0

@AmitKumarGhosh вы бы поместили« 1 »в имя свойства, или если это переменное количество элементов, вы должны использовать цикл for, используя ваш метод. –

0

Хотя нет никакого прямого способа построения строго типизированного C# объект в этом случай, Вы можете все еще есть возможности для разбора json строку вручную и значения Extract -

var json = "{'1':{'name':'test','age':'test'}}"; 
var t = JObject.Parse(json)["1"]; 
Console.WriteLine(t["name"]); //test 
Console.WriteLine(t["age"]); //test 
+0

Спасибо за ваш ответ - именно так я собирался подойти к нему, пока не увидел: http://stackoverflow.com/questions/24218536/deserialize-json-that-has-some- property-name-start-with-a-number, что дает возможность. –