c# - C#:如何在 json 的引号内使用括号?
问题描述
我有这个 json 文件:
{
"TestString": "This is a \"{Test}\""
}
如果它不存在,我会自动生成它。
例如,这是一个 C#-Code,我直接使用字符串:
class Programm
{
static void Main()
{
string s = "{ \"TestString\": \"This is a \"{test}\"\"}";
Test test = JsonConvert.DeserializeObject<Test>(s);
}
}
现在的问题是,字符串不能以这种方式工作,因为 C# 会将引号变为文字,然后将其存储在 中string s
,从而导致
"{ "TestString": "This is a "{test}""}"
这是一个错误的 json 字符串,导致引号没有被转义。
static void Main()
{
string s = @"{ ""TestString"": ""This is a ""{test}""""}";
Test test = JsonConvert.DeserializeObject<Test>(s);
}
使整个字符串成为文字结果相同。
有什么我错过了吗?
解决方案
\"{test}\"
添加转义引号,以便 C# 不会终止字符串,但会破坏 JSON。要转义 JSON 中的引号,您还需要添加转义的反斜杠\\
,并且 JSON 应该是:
string s = "{ \"TestString\": \"This is a \\\"{test}\\\"\"}";
生成正确 JSON 的更好方法是序列化匿名对象(除非您有适当的模型。
var model = new { TestString = "This is a \"{test}\""};
string s = JsonConvert.SerializeObject(model);
Test test = JsonConvert.DeserializeObject<Test>(s);
注意:您也可以使用逐字字符串
对于逐字字符串,斜线只是一个斜线,而不是转义字符。要嵌入引号,请使用双双引号 ( ""
)。还保留了换行符,允许您轻松创建多行字符串,而无需回车 ( \r
) 和换行符 ( \n
) 的组合。它们通常更容易阅读 - 请注意字符串末尾的 4 个双引号序列。
string s = @"{ ""TestString"": ""This is a \""{test}\""""}";
推荐阅读
- php - 无法使用 php sdk 获取快速书刷新令牌
- r - 在 R 中同时对数据框的列运行单个 t 检验的最佳方法是什么?
- angular - 在 Angular 10 中的选择标签上运行多个函数
- python - 在 tkinter 中,当标签文本出现在窗口上时,按钮从其先前位置向下移动
- security - 我可以在多个 DevOps 产品团队之间安全地共享一个 k8s 集群吗?
- ansible - Netbox Ansible VLAN 分配
- json - SQL JSON_VALUE 查询但没有路径名?
- google-chrome-headless - SElinux 阻止 Google-Chrome(无头)
- angular - 无法在角度电子邮件编辑器中读取未定义的属性“值”
- javascript - 如何删除 JavaScript 中句子的最后一个字符?