2015-12-03 3 views
0

Поскольку мой последний вопрос был отмечен как дубликат, и я не нашел ответа в рекомендуемой ссылке, я снова задаю свой вопрос.Список, назначенный Json deserialize, равен null

Я хочу десериализовать некоторые данные JSON и передать его для просмотра в моем приложении ASP.NET MVC 5.

Моя модель:

public class OrderModel 
{ 
    public string Seat { get; set; } 
    public string objectId { get; set; } 
    public DateTime? createdAt { get; set; } 

} 

Я прочитал, что для десериализации данных JSON к списку объектов я должен сделать класс «корень», который находится здесь:

public class OrderRootModel 
{ 
    public List<OrderModel> OrderList { get; set; } 

} 

Вот метод который получает данные JSON в классе ApiModel и присваивает список. Этот метод, вероятно, является проблемой, так как она возвращается нуль:

//ApiModel class 
    public OrderRootModel GetOrderData() 
     { 

      string url = "https://api.parse.com/1/classes/Orders"; 

      OrderRootModel model = new OrderRootModel(); 
      model = JsonConvert.DeserializeObject<OrderRootModel>(getParseIdData(url)); 
      return model; 
     } 

Вот метод, который получает JSON строку:

public string getParseIdData(string url) 
     { 
      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
      request.Headers.Add("X-Parse-Application-Id", id); 
      request.Headers.Add("X-Parse-REST-API-KEY", key); 
      try 
      { 
       WebResponse response = request.GetResponse(); 
       using (Stream responseStream = response.GetResponseStream()) 
       { 
        StreamReader reader = new StreamReader(responseStream, Encoding.UTF8); 
        return reader.ReadToEnd(); 
       } 
      } 
      catch (WebException ex) 
      { 
       WebResponse errorResponse = ex.Response; 
       using (Stream responseStream = errorResponse.GetResponseStream()) 
       { 
        StreamReader reader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8")); 
        String errorText = reader.ReadToEnd(); 
        Console.WriteLine(errorText); 
       } 
       throw; 
      } 
     } 

Вот getParseIdData() Ответ:

{"results":[{"Seat":"5","createdAt":"2015-11-29T18:50:15.320Z","objectId":"BsDSolYPsT","updatedAt":"2015-11-29T19:40:55.020Z"},{"Seat":"6","createdAt":"2015-12-02T22:31:36.892Z","objectId":"kQJ0R5TUvw","updatedAt":"2015-12-02T22:31:36.892Z"},{"Seat":"7","createdAt":"2015-12-02T22:31:40.261Z","objectId":"sVtdj3aipb","updatedAt":"2015-12-02T22:31:40.261Z"},{"Seat":"8","createdAt":"2015-12-02T22:31:43.082Z","objectId":"7oH2ySrDFH","updatedAt":"2015-12-02T22:31:43.082Z"}]} 

Мой контроллер:

public ActionResult Index() 
     { 
      ApiModel model = new ApiModel(); 

      return View(model.GetOrderData()) ; 
     } 

Так что, наверное, я ошибся где-то в методе GetOrderData(), так как он возвращает null. Можете ли вы помочь мне решить эту проблему?

+2

Она не должна называться 'OrderList', он должен быть назван' results'. В вашем классе 'OrderModel' также отсутствует поле" updatedAt'. –

+0

Теперь он работает. Священная моля, которая была глупой ошибкой. Спасибо! – Kesto

+1

Возможный дубликат [MVC5 JSON list NullReference exception] (http://stackoverflow.com/questions/34072703/mvc5-json-list-nullreference-exception) – Ross

ответ

2

на основе кода, это то, что бы C# класс должен выглядеть при преобразовании JSON в C# класса

{ 
    "results":[ 
     {"Seat":"5","createdAt":"2015-11-29T18:50:15.320Z","objectId":"BsDSolYPsT","updatedAt":"2015-11-29T19:40:55.020Z"}, 
     {"Seat":"6","createdAt":"2015-12-02T22:31:36.892Z","objectId":"kQJ0R5TUvw","updatedAt":"2015-12-02T22:31:36.892Z"}, 
     {"Seat":"7","createdAt":"2015-12-02T22:31:40.261Z","objectId":"sVtdj3aipb","updatedAt":"2015-12-02T22:31:40.261Z"}, 
     {"Seat":"8","createdAt":"2015-12-02T22:31:43.082Z","objectId":"7oH2ySrDFH","updatedAt":"2015-12-02T22:31:43.082Z"} 
     ] 
} 

public class Result 
{ 
    public string Seat { get; set; } 
    public string createdAt { get; set; } 
    public string objectId { get; set; } 
    public string updatedAt { get; set; } 
} 

public class RootObject 
{ 
    public List<Result> results { get; set; } 
}