【发布时间】:2018-04-17 08:54:43
【问题描述】:
如果我有一个 JSON 属性,其中包含另一个 JSON 块的 字符串,不是实际的 JSON,而是包含 JSON 的字符串,我如何阻止 Deserialize 尝试反序列化该字符串?
FIG A:我的 JSON 字符串示例结构:
{
"name" : "parent",
"data" : "{
"name" : "child",
"data" : "foobar",
}",
}
图 B:普通嵌套 JSON 示例
{
"name" : "parent",
"data" :
{
"name" : "child",
"data" : "foobar",
},
}
因此,当我反序列化 FIG A 中的父对象时,我应该得到一个具有 2 个字符串属性的对象,一个称为“名称”,包含“父”,一个称为“数据”,包含'{ "name" : "child", "data" : "foobar" }'
但是当我尝试这样做时,我得到一个错误。
这是它试图解析的确切 JSON:
"{ \"result\" : true, \"status\" : \"success\", \"data\" : \"{ \"id\" : 1, \"name\" : \"demo\", \"pixeldata\" : [{ \"time\" : \"1\", \"colour\" : \"#ff5357\"},{ \"time\" : \"2\", \"colour\" : \"#2424ff\"},{ \"time\" : \"3\", \"colour\" : \"#ff0d13\"},{ \"time\" : \"4\", \"colour\" : \"#f7ff4a\"},{ \"time\" : \"5\", \"colour\" : \"#fa24ff\"},{ \"time\" : \"6\", \"colour\" : \"#ff3e43\"}] }\" }"
这是确切的错误消息:
"After parsing a value an unexpected character was encountered: i. Path 'data', line 1, position 54."
这是它应该解析成的结构:
public struct ServerResponse
{
public bool result;
public string status;
public string data;
}
public struct Display
{
public int id;
public string name;
public Data[] pixeldata;
}
public struct Data
{
public float time;
public string colour;
}
这是导致异常的确切代码行:
response = JsonConvert.DeserializeObject<API.ServerResponse>(_raw_response_data);
有什么线索吗?
【问题讨论】:
-
是的,意外的字符是双引号。这不是字符串中的 JSON 的事实。是内部JSON中的双引号没有转义,所以它创建了无效的语法