하드코드된 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
'sourcetip' 카테고리의 다른 글
MySQL 데이터베이스에서 WordPress 버전 확인 (0) | 2023.03.14 |
---|---|
커스텀 퍼머링크 구조: /% custom-post-type%/% custom-taxonomy%/%post-name%/ (0) | 2023.03.14 |
오브젝트 배열에 대해 ng-interface를 설정합니다. (0) | 2023.03.14 |
기록 사용, 리액트 큐브 돔 v6 (0) | 2023.03.14 |
다른 ng-include가 같은 페이지에 있습니다.각자에게 다른 변수를 송신하려면 어떻게 해야 합니까? (0) | 2023.03.14 |