c# - 解析这种json字符串化的字符串 "{\"值\":[\"18\"]}"

标签 c# json serialization json.net

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

如何从这个字符串化的字符串中取出值?

"{\"value\":[\"18\"]}"

编辑@

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

    var data = new FormData();
    data.append('cates', JSON.stringify(toSend));

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

https://gyazo.com/b9a6f212345b854796af3d80e4169a23

@反序列化

        foreach (var item in data.cates)
        {
            var l = JsonConvert.DeserializeObject(item);
        }

最佳答案

看起来您的 JSON 已被双重序列化,即一个对象被序列化为 JSON,然后该字符串被再次序列化。参见 JSON.NET Parser seems to be double serializing my objects有关如何使用 asp.net-web-api 轻松犯此错误的示例。

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

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

对根对象使用:

public class RootObject
{
    public List<string> value { get; set; }
}

关于c# - 解析这种json字符串化的字符串 "{\"值\":[\"18\"]}",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41454690/

相关文章:

python lxml.etree._Element 到 JSON 或 dict

C# 下载与 URL 中名称相同的图像

c# - 如何在从 Web 应用程序输入的数据库中以加密格式存储密码?

c# - 条件为假时执行的 If 语句 True block

c# - 如何全局设置 System.Text.Json.JsonSerializer 的默认选项?

c# - 有没有人使用 Hessian 二进制远程协议(protocol)来桥接使用 Java 和 .NET 的应用程序?

ruby - 如何在 Ruby/Rails 中缓存/序列化 Net::IMAP 对象?

c# - 如何在服务器端获取 MS Dynamics CRM 中的当前用户权限

java - net.sf.json 对象中的十进制格式问题

json - 如何获得MVC Action 以返回错误状态