反序列化 json 对象时出现异常

exception when deserializing json object

我正在尝试将一些简单的 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"}]}

我 运行 没有想法

编辑:

我刚试过

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

它给了我同样的问题

编辑 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);
        }
              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);

这就是反序列化失败的原因,因为您将初始 json 序列化为第二个字符串,然后尝试将其反序列化为 RootObject。

你的控制器应该是这样的

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


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

              return serializeObject;
            }