我在将这个json字符串存储到变量时遇到了问题.这是我在这里失踪的傻事
private string someJson = @"{
"ErrorMessage": "",
"ErrorDetails": {
"ErrorID": 111,
"Description": {
"Short": 0,
"Verbose": 20
},
"ErrorDate": ""
}
}";
Run Code Online (Sandbox Code Playgroud)
小智 47
如果使用@符号,它必须转义"s",它不允许\在第一个之后用作转义符号.所以这两个选项是:
不要使用@并使用\来逃避"
string someJson = "{\"ErrorMessage\": \"\",\"ErrorDetails\": {\"ErrorID\": 111,\"Description\":{\"Short\": 0,\"Verbose\": 20},\"ErrorDate\": \"\"}}";
Run Code Online (Sandbox Code Playgroud)
或使用双引号
string someJson =@"{""ErrorMessage"": """",""ErrorDetails"": {""ErrorID"": 111,""Description"": {""Short"": 0,""Verbose"": 20},""ErrorDate"": """"}}";
Run Code Online (Sandbox Code Playgroud)
And*_*ray 12
首先,我会把它扔出去:因为这个原因,在JSON blobs中,我喜欢使用单引号.
但是,很大程度上取决于你将如何声明你的string
变量.
string jsonBlob = @"{ 'Foo': 'Bar' }";
string otherBlob = @"{ ""Foo"": ""Bar"" }";
Run Code Online (Sandbox Code Playgroud)
...这是一个ASCII编码的字符串,它应该与单引号很好地配合使用.您可以使用双重双引号转义序列来转义双精度数,但单引号设置更清晰.请注意,"在这种情况下不起作用.
string jsonBlob = "{ 'Foo': 'Bar' }";
string otherBlob = "{ \"Foo\": \"Bar\" }";
Run Code Online (Sandbox Code Playgroud)
...此声明使用C#的默认字符串编码Unicode.请注意,您必须使用双引号的斜杠转义序列 - 双倍不会起作用 - 但单个不受影响.
从中可以看出,单引号JSON文字不受正在使用的C#字符串编码的影响.这就是为什么我说单引号在硬编码的JSON blob中使用比使用双精度更好 - 它们工作量少,可读性更强.
小智 8
简单的方法是将 JSON 复制到 .json 文件并在代码中读取该文件
string jsonData = string.Empty;
jsonData = File.ReadAllText(@"\UISettings.json");
Run Code Online (Sandbox Code Playgroud)
本末倒置的解决方案是将匿名类序列化为字符串:
var someJson = JsonConvert.SerializeObject(
new
{
ErrorMessage = "",
ErrorDetails = new
{
ErrorID = 111,
Description = new
{
Short = 0,
Verbose = 20
},
ErrorDate = ""
}
});
Run Code Online (Sandbox Code Playgroud)
我也遇到了同样的问题,我最终编写了一个开源在线转换器,它接受 JSON 字符串并使用双引号语法吐出 C# excaped 字符串。所以
{ "foo":"bar"}
Run Code Online (Sandbox Code Playgroud)
将被逃逸到
var jsonString = @"{ ""foo"":""bar""}";
Run Code Online (Sandbox Code Playgroud)
小智 5
从 .NET 7 支持的C# 11开始,可以通过将 JSON 字符串括在三引号字符中来嵌入不进行任何修改的 JSON 字符串,该功能称为原始字符串文字( learn.microsoft.com )。相关的有用语言功能是StringSyntaxAttribute,它允许 Visual Studio 识别字符串变量是 JSON 字符串并突出显示任何拼写错误。一个样品:
using System.Diagnostics.CodeAnalysis;
using System.Text.Json;
internal class Program
{
[StringSyntax(StringSyntaxAttribute.Json)]
private const string myCountry = """{"Name": "Slovakia", "CountryCode": 421}""";
private static void Main(string[] args)
{
var _ = JsonSerializer.Deserialize<Country>(myCountry);
}
class Country
{
public string Name { get; set; } = default!;
public int CountryCode { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)