解析这种json字符串化字符串 "{\"value\":[\"18\"]}"

bun*_*aka 1 c# serialization json json.net

我就是想不通这个。已经尝试过 JsonConvert.SerializeObject(item) 并且我也得到了一个奇怪的字符串。

我怎样才能从这个字符串化的字符串中取出值?

"{\"value\":[\"18\"]}"
Run Code Online (Sandbox Code Playgroud)

编辑@

这是我对其进行字符串化的地方:

    var data = new FormData();
    data.append('cates', JSON.stringify(toSend));
Run Code Online (Sandbox Code Playgroud)

这是我从模型>道具列表中得到的输出

https://gyazo.com/b9a6f212345b854796af3d80e4169a23

@反序列化

        foreach (var item in data.cates)
        {
            var l = JsonConvert.DeserializeObject(item);
        }
Run Code Online (Sandbox Code Playgroud)

dbc*_*dbc 5

看起来好像您的 JSON 已被双重序列化,即一个对象被序列化为 JSON,然后该字符串再次被序列化。有关如何使用 asp.net-web-api 轻松犯此错误的示例,请参阅JSON.NET Parser似乎正在双重序列化我的对象

解决该问题的最佳方法是一开始不要对 JSON 进行双重序列化。如果由于某种原因无法修复此问题(因为例如,双序列化 JSON 是从您无法修改的某些 3rd 方服务返回的),您也可以始终反序列化两次:

var json = @"""{\""value\"":[\""18\""]}""";

Console.WriteLine("JSON: ");
Console.WriteLine(json); // Prints "{\"value\":[\"18\"]}"

var intermediateJson = JsonConvert.DeserializeObject<string>(json);
var root = JsonConvert.DeserializeObject<RootObject>(intermediateJson);

Console.WriteLine("Reserialized root: ");
Console.WriteLine(JsonConvert.SerializeObject(root)); // Prints {"value":["18"]}
Console.WriteLine("value:");
Console.WriteLine(root.value.First()); // Prints 18
Run Code Online (Sandbox Code Playgroud)

对于根对象使用:

public class RootObject
{
    public List<string> value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)