传递给字典时,字符未正确转义

Mit*_*tch 1 c# json escaping visual-studio

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

我有字符串

Principal = "{\"id\":\"number\"}"
Run Code Online (Sandbox Code Playgroud)

如果我没有弄错,这应该逃避{"id":"number"}.

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

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

它返回为

{
"Principal":"{\"id\":\"number\"}"
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望它能够回归

{
"Principal":{"id":"number"}
}
Run Code Online (Sandbox Code Playgroud)

为什么它坚持引号和转义字符?我在这做错了什么?

Com*_*eak 5

你的Principal是一个字符串,因此被转义为一个字符串.

如果要将其作为JSON对象转义,则它也必须是应用程序中的对象.

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

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

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

班级定义:

class Principal
{
    public string id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

用法:

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