在将此标记为重复之前,具有相似名称的其他问题与正则表达式相关,并且与我的问题不同。
我有字符串
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"}
}
为什么它会保留引号和转义字符?我在这里做错了什么?
答案 0 :(得分: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);
/ 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);
答案 1 :(得分:3)
添加到@ Compufreak&#39; s answer的一个选项。
您对JsonConvert.SerializeObject()
的来电表示您已使用json.net。如果你有一个预序列化的JSON文字字符串,你需要按顺序包含,而不是在序列化容器时在某个容器POCO中转义,你可以将字符串包装在JRaw
对象中:
folder.Add("Principal", new Newtonsoft.Json.Linq.JRaw(Principal));
随后 JsonConvert.SerializeObject()
将发出JSON字符串而不进行转义。当然,Principal
字符串需要有效 JSON,否则生成的序列化将会很糟糕。
示例fiddle。