不要反序列化嵌套的JSON字符串

时间:2018-04-17 00:43:36

标签: c# json

如果我有一个JSON属性,其中包含另一个JSON块的字符串,而不是实际的JSON,而是包含JSON的字符串,如何阻止反序列化尝试反序列化该字符串?

图A :我的带有JSON字符串的示例结构:

{
    "name" : "parent",
    "data" : "{
        "name" : "child",
        "data" : "foobar",
        }",
}

图B :正常嵌套JSON的示例

{
    "name" : "parent",
    "data" : 
    {
        "name" : "child",
        "data" : "foobar",
    },
}

因此,当我在 FIG A 中反序列化父对象时,我应该得到一个具有2个字符串属性的对象,一个名为'name',包含'parent',另一个名为'data',包含'{“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);

任何线索?

1 个答案:

答案 0 :(得分:1)

根本原因在于您提供的字符串序列化作为示例(您说的那个&#39;它是它试图解析的确切JSON)

\"data\" : \"{ \"id\" : 1,是:"data" : "{ "id" : 1

数据字符串中的内部双引号未被转义。

应该是

\"data\" : \"{ \\\"id\\\" : 1,,即"data" : "{ \"id\" : 1