我在将此json字符串存储到变量时遇到问题。这是我在这里失踪的愚蠢行为
private string someJson = @"{
"ErrorMessage": "",
"ErrorDetails": {
"ErrorID": 111,
"Description": {
"Short": 0,
"Verbose": 20
},
"ErrorDate": ""
}
}";
答案 0 :(得分:38)
如果使用@符号,它必须转义“s”,它不允许\在第一个之后用作转义符号。所以这两个选项是:
不要使用@并使用\来逃避“
string someJson = "{\"ErrorMessage\": \"\",\"ErrorDetails\": {\"ErrorID\": 111,\"Description\":{\"Short\": 0,\"Verbose\": 20},\"ErrorDate\": \"\"}}";
或使用双引号
string someJson =@"{""ErrorMessage"": """",""ErrorDetails"": {""ErrorID"": 111,""Description"": {""Short"": 0,""Verbose"": 20},""ErrorDate"": """"}}";
答案 1 :(得分:9)
首先,我会把它扔出去:因为这个原因,我想在JSON blob中使用单引号。
但是,很大程度上取决于你将如何声明你的string
变量。
string jsonBlob = @"{ 'Foo': 'Bar' }";
string otherBlob = @"{ ""Foo"": ""Bar"" };
...这是一个ASCII编码的字符串,它应该与单引号很好地配合。您可以使用双重双引号转义序列来转义双精度数,但单引号设置更清晰。请注意,“在这种情况下不起作用。
string jsonBlob = "{ 'Foo': 'Bar' }";
string otherBlob = "{ \"Foo\": \"Bar\" };
...此声明使用C#的默认字符串编码Unicode。请注意,您必须使用带双引号的斜杠转义序列 - 双精度不起作用 - 但单曲不受影响。
由此可以看出,单引号JSON文字不受正在使用的C#字符串编码的影响。这就是为什么我说单引号在硬编码的JSON blob中使用比使用双精度更好 - 它们的工作量更少,更易读。
答案 2 :(得分:3)
在字符串中用c#内联编写JSON有点笨重,因为JSON标准需要双引号,需要在c#中转义,如其他答案所示。一个优雅的解决方法是使用来自JSON.Net的c#dynamic和JObject。
DataStream
请参阅https://www.newtonsoft.com/json/help/html/CreateJsonDynamic.htm。
答案 3 :(得分:0)
简单方法是将JSON复制到.json文件并通过代码读取该文件
string jsonData = string.Empty;
jsonData = File.ReadAllText(@"\UISettings.json");