2015-03-06 5 views
0

Я пытаюсь десериализация некоторых простых JSON в ниже объектыисключения при десериализации объекта JSON

public class Car 
    { 
     public int car_id { get; set; } 
     public string name { get; set; } 
    } 

    public class RootObject 
    { 
     public List<Car> cars { get; set; } 
    } 

Это вызов я делаю

using (var client = new HttpClient(handler)) 
       { 

        client.BaseAddress = new Uri("http://localhost/WebApiServer/Reference/"); 

        client.DefaultRequestHeaders.Accept.Clear(); 
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 


        HttpResponseMessage response = client.GetAsync("cars").Result; 
        if (response.IsSuccessStatusCode) 
        { 
         HttpContent httpContent = response.Content; 
         string responseString = httpContent.ReadAsStringAsync().Result; 
//error happens here 
         var deserializeObject = JsonConvert.DeserializeObject<RootObject>(responseString); 
        } 

этого значение строки ответа от отладчика в VS

"\"{ \\\"cars\\\": [{\\\"car_id\\\":46,\\\"name\\\":\\\"Ford-Fiesta\\\"]}}\"" 

и это исключение

// исключение

Error converting value "{ "cars": [{"car_id":46,"name":"Ford-Fiesta"]}}" to type 'WebApiJson.Program+RootObject'. Path '', line 1, position 62. 

это JSON - я читаю из файла

{ "cars": [{"car_id":46,"name":"Ford-Fiesta"}]} 

Я иссякли идеи

EDIT:

Я просто исп.

string serializeObject = JsonConvert.SerializeObject(text); 
    var deserializeObject = JsonConvert.DeserializeObject<RootObject>(serializeObject); 

и дает мне ту же самую проблему

EDIT 2 мой контроллер возвращая JSon

public string Cars() 
     { 
      string text = System.IO.File.ReadAllText("json.txt"); 

      string serializeObject = JsonConvert.SerializeObject(text); 

      Debug.WriteLine(serializeObject); 
//   this fails 
      var deserializeObject = JsonConvert.DeserializeObject<RootObject>(serializeObject); 

      return JsonConvert.SerializeObject(text); 
     } 
+0

Можете ли вы отправить JSON без экранирующих символов ?? –

+0

Этот JSON хорош: '{" cars ": [{" car_id ": 46," name ":" Ford-Fiesta "}]}'. Но JSON, фактически показанный в тексте исключения, нарушен: '{" cars ": [{" car_id ": 46," name ":" Ford-Fiesta "]}}'. Проблема в том, что последние три символа: ']}}', но должны быть '}]}'. – dbc

+0

да, я изменил это, но все равно делаю это – kurasa

ответ

0
   string text = System.IO.File.ReadAllText("json.txt"); 

       //this line is WRONG!! 
       string serializeObject = JsonConvert.SerializeObject(text); 

       //this fails because serializeObject is a double serialized string 
       //which you try to deserialize to RootOject     
       var deserializeObject = JsonConvert.DeserializeObject<RootObject>(serializeObject); 

        return JsonConvert.SerializeObject(text); 

Вы сериализацию строки в строку.

string serializeObject = JsonConvert.SerializeObject(text); 

Это не так, вам следует десериализовать объект.

RootObject obj = JsonConvert.DeserializeObject<RootObject>(text); 

Вот почему ваш Deserialize терпит неудачу, потому что вы сериализации ваш первоначальный JSON во вторую строку, а затем попытаться десериализации его в RootObject.

Ваш контроллер должен читать что-то вроде этого

public RootObject Cars() 
      { 
       string text = System.IO.File.ReadAllText("json.txt"); 


       RootObject serializeObject = JsonConvert.DeserializeObject<RootObject>(text); 

       return serializeObject; 
      } 
+0

да, я знаю. Я только что осознал свою ошибку и прокомментировал это. Спасибо за ваш ответ, хотя – kurasa

+0

@kurasa счастлив, что вы это поняли сами! :) пожалуйста! –

+1

@ kurasa также помните, что ваш контроллер не нуждается в десериализации, вы можете просто просто вернуть содержимое json.txt, если это то, что вам нужно сделать. –

Смежные вопросы