c# - 传递给字典时字符未正确转义

标签 c# json visual-studio escaping

在这被标记为重复之前,另一个具有相似名称的问题与正则表达式相关并且与我的问题不同。

我有字符串

Principal = "{\"id\":\"number\"}"

如果我没记错的话,这应该转义为 {"id":"number"}

但是,当我将它传递给下面的方法时

Dictionary<string, object> folder = new Dictionary<string, object>();
            folder.Add("Principal", Principal);
            string json = JsonConvert.SerializeObject(folder);
            Console.WriteLine(json);

它返回为

{
"Principal":"{\"id\":\"number\"}"
}

理想情况下我希望它返回

{
"Principal":{"id":"number"}
}

为什么要保留引号和转义字符?我在这里做错了什么?

最佳答案

您的 Principal 是一个字符串,因此会作为一个字符串进行转义。

如果您想将其转义为 JSON 对象,则它也需要是您应用程序中的一个对象。

如果你还想反序列化它或者多次使用它,我建议在一个类中定义你的对象。如果没有,您可以只使用匿名对象:

Dictionary<string, object> folder = new Dictionary<string, object>();
folder.Add("Principal", new { id = "number" });
string json = JsonConvert.SerializeObject(folder);
Console.WriteLine(json);

/edit:这是一个非匿名类:

类定义:

class Principal
{
    public string id { get; set; }
}

用法:

Dictionary<string, object> folder = new Dictionary<string, object>();
folder.Add("Principal", new Principal(){ id = "number" });
string json = JsonConvert.SerializeObject(folder);
Console.WriteLine(json);

关于c# - 传递给字典时字符未正确转义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43239531/

相关文章:

c# - 升级到 Visual Studio 2015 会出现假错误

asp.net - 为 Web API 操作设置默认媒体格式化程序

ios - Swift 2 使用 swiftyJSON 从在线 URL 解析 JSON

c++ - 错误 C2280:Class::Class(void):尝试引用已删除的函数

c# - 如何有效地计算大量数字的均值和标准差?

c# - 使用作业对象限制用户处理器时间和查看虚拟内存

c# - 是否有任何简单的方法可以从内部将值分配给模型列表?

c# - 如何在 C# 中过滤 JSON 数组

java - 意外字符 ('<'(代码 60))

visual-studio - 错误 MSB4096 : . .. 未定义元数据 "Name"的值