反序列化 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;
}
我正在尝试将一些简单的 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;
}