将硬编码JSON字符串存储到变量

wgx48brx  于 2022-12-01  发布在  其他
关注(0)|答案(7)|浏览(133)

我在将这个json字符串存储到一个变量时遇到了一个问题。一定是我在这里遗漏了一些愚蠢的东西

private string someJson = @"{
    "ErrorMessage": "",
    "ErrorDetails": {
        "ErrorID": 111,
        "Description": {
            "Short": 0,
            "Verbose": 20
        },
        "ErrorDate": ""
    }
}";
axkjgtzd

axkjgtzd1#

如果使用@符号,则必须对“”进行转义,因为它不允许在第一个“”之后使用\作为转义符。因此,有两个选项:
不要使用@,而使用\来转义“

string someJson = "{\"ErrorMessage\": \"\",\"ErrorDetails\": {\"ErrorID\": 111,\"Description\":{\"Short\": 0,\"Verbose\": 20},\"ErrorDate\": \"\"}}";

或使用双引号

string someJson =@"{""ErrorMessage"": """",""ErrorDetails"": {""ErrorID"": 111,""Description"": {""Short"": 0,""Verbose"": 20},""ErrorDate"": """"}}";
qyyhg6bp

qyyhg6bp2#

首先,我要说的是:正是由于这个原因,我喜欢在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中使用单引号比使用双引号更好的原因--它们工作量更少,可读性更强。

pkbketx9

pkbketx93#

简单的方法是将JSON复制到一个.json文件中,然后在代码中读取该文件

string jsonData = string.Empty;
jsonData = File.ReadAllText(@"\UISettings.json");
pjngdqdw

pjngdqdw4#

用C#在字符串中编写JSON内联有点笨拙,因为JSON标准要求双引号,在C#中需要转义,如其他答案所示。一个优雅的解决方案是使用C#动态和JSON.Net中的JObject。

dynamic message = new JObject();
message.ErrorMessage = "";
message.ErrorDetails = new JObject();
message.ErrorDetails.ErrorId = 111;
message.ErrorDetails.Description = new JObject();
message.ErrorDetails.Description.Short = 0;

Console.WriteLine(message.ToString());

// Ouputs:
// { 
//   "ErrorMessage": "",
//   "ErrorDetails": {
//     "ErrorID": 111,
//     "Description": {
//       "Short": 0
// .....

请参阅https://www.newtonsoft.com/json/help/html/CreateJsonDynamic.htm

vfwfrxfs

vfwfrxfs5#

我也遇到了同样的问题,最后我写了一个开源的在线转换器,它接受JSON字符串,并使用双引号语法吐出C#替换的字符串。

{ "foo":"bar"}

将逃入

var jsonString = @"{ ""foo"":""bar""}";
af7jpaap

af7jpaap6#

如果您使用的是Visual Studio,则选择整个JSON字符串,然后按crtl+f查找所选内容中的双引号,然后将“替换为“”

ocebsuys

ocebsuys7#

从.NET 7支持的C# 11开始,可以通过将JSON字符串括在三引号字符中来嵌入JSON字符串而无需任何修改,这是一个称为 Raw string literallearn.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; }
    }
}

相关问题