sourcetip

하드코드된 JSON 문자열을 변수에 저장

fileupload 2023. 3. 14. 21:49
반응형

하드코드된 JSON 문자열을 변수에 저장

이 json 문자열을 변수에 저장하는 데 문제가 있습니다.내가 놓치고 있는 게 분명 바보 같아

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

@ 기호를 사용하는 경우 첫 번째 " 뒤에 \를 이스케이프로 사용할 수 없습니다.다음 두 가지 옵션이 있습니다.

@ 를 사용하지 말고\ 를 사용하여 " 를 회피합니다.

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

또는 큰따옴표를 사용합니다.

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

먼저, 이걸 밖으로 던질게요.이런 이유로 JSON Blobs에서는 작은 따옴표를 사용하는 것을 좋아합니다.

하지만, 많은 것들이 어떻게 선언하느냐에 따라 달라지죠string변수.

string jsonBlob = @"{ 'Foo': 'Bar' }";
string otherBlob = @"{ ""Foo"": ""Bar"" }";

...이것은 ASCII로 인코딩된 문자열로, 작은 따옴표로 올바르게 재생됩니다.이중 따옴표 이스케이프 시퀀스를 사용하여 이중 따옴표를 피할 수 있지만 단일 따옴표 설정이 더 깔끔합니다.이 경우 "는 작동하지 않습니다.

string jsonBlob = "{ 'Foo': 'Bar' }";
string otherBlob = "{ \"Foo\": \"Bar\" }";

...이 선언에서는 C#의 기본 문자열 인코딩인 Unicode를 사용합니다.슬래시 이스케이프 시퀀스는 큰따옴표로 묶어서 사용해야 합니다.- 이중 이중따옴표는 작동하지 않습니다.단, 싱글은 영향을 받지 않습니다.

이를 통해 단일 따옴표로 둘러싸인 JSON 리터럴은 사용되는 C# 문자열 인코딩의 영향을 받지 않음을 알 수 있습니다.그렇기 때문에 단일 인용문은 더블보다 하드코딩된 JSON BLOB에서 사용하는 것이 더 낫다고 생각합니다.작업이 적고 읽기 쉽기 때문입니다.

간단한 접근법은 JSON을 .json 파일에 복사하여 코드에서 해당 파일을 읽는 것입니다.

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

문자열에 c#을 사용하여 인라인으로 JSON을 쓰는 것은 다른 답변과 같이 c#으로 이스케이프할 필요가 있는 JSON 표준에서 요구하는 이중 따옴표 때문에 다소 애매합니다.JSON의 c# dynamic과 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 를 참조해 주세요.

같은 문제가 있었습니다만, 오픈 소스 온라인 컨버터를 써 버렸습니다.이 컨버터는 JSON 문자열을 사용하여 큰따옴표로 둘러싸인 구문을 사용하여 C#expaped 문자열을 출력합니다.그렇게

{ "foo":"bar"}

로 빠져나가다

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

에서 지원되는 C# 11 이후.NET 7, Raw string literal(learn.microsoft.com)이라고 하는 기능인 세 의 따옴표로 둘러싸면 수정 없이 JSON 문자열을 삽입할 수 있습니다.이와 관련된 유용한 언어 기능은 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; }
    }
}

Visual Studio를 사용하는 경우 전체 JSON 문자열을 선택한 후 crtl+f를 선택하여 선택 항목에서 큰따옴표를 찾은 다음 "를 ""로 바꿉니다.

언급URL : https://stackoverflow.com/questions/22998177/store-hardcoded-json-string-to-variable

반응형