Сохранить строку Hardcoded JSON для переменной

У меня возникла проблема с сохранением этой строки json переменной. Это должно быть что-то глупое, я здесь отсутствует

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

Ответ 1

Вам нужно избегать "если вы используете символ @, он не позволяет использовать\как escape после первого". Таким образом, два варианта:

не используйте @и используйте\для выхода из

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

или использовать двойные кавычки

string someJson [email protected]"{""ErrorMessage"": """",""ErrorDetails"": {""ErrorID"": 111,""Description"": {""Short"": 0,""Verbose"": 20},""ErrorDate"": """"}}";

Ответ 2

Перво-наперво, я добавлю это: по этой причине в двоичных объектах JSON мне нравится использовать одинарные кавычки.

Но многое зависит от того, как вы собираетесь объявлять переменную string.

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

... Это строка в кодировке ASCII, и она должна хорошо проигрываться в одинарных кавычках. Вы можете использовать escape-последовательность двойных двойных кавычек, чтобы избежать двойных кавычек, но установка с одинарными кавычками более понятна. Обратите внимание, что\"не будет работать в этом случае.

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

... В этом объявлении используется кодировка строки С# по умолчанию, Unicode. Обратите внимание, что вы должны использовать escape-последовательность с косыми чертами в двойных кавычках - двойные-двойные не будут работать - но это не влияет на одиночные символы.

Отсюда видно, что литералы JSON с одинарными кавычками не зависят от используемой строковой кодировки С#. Вот почему я говорю, что одинарные кавычки лучше использовать в жестко закодированном двоичном объекте JSON, чем в двойных - они меньше работают и более читабельны.

Ответ 3

Написание JSON inline с использованием c # в строках немного неуклюже из-за двойных кавычек, требуемых стандартом JSON, которые необходимо экранировать в c #, как показано в других ответах. Один элегантный обходной путь - это использование c # dynamic и JObject из JSON.Net.

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.

Ответ 4

Простой подход - скопировать JSON в файл .json и прочитать этот файл в коде.

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