web-dev-qa-db-fra.com

Stocker une chaîne JSON codée en dur dans une variable

J'ai un problème pour stocker cette chaîne JSON dans une variable. Ça doit être quelque chose de stupide me manque ici

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

Vous devez échapper le "si vous utilisez le symbole @, il ne permet pas que le\soit utilisé comme un échappement après le premier". Donc les deux options sont:

n'utilisez pas le @ et utilisez\pour échapper au " 

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

ou utilisez des guillemets doubles 

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

Tout d’abord, je vais jeter ceci: c’est pour cette raison dans les blobs JSON que j’aime utiliser des guillemets simples.

Mais tout dépend de la manière dont vous allez déclarer votre variable string.

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

... C'est une chaîne encodée en ASCII, qui devrait bien fonctionner avec des guillemets simples. Vous pouvez utiliser la séquence d'échappement double citation double pour échapper aux doubles, mais la configuration d'une citation simple est plus propre. Notez que\"ne fonctionnera pas dans ce cas.

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

... Cette déclaration utilise le codage de chaîne par défaut de C #, Unicode. Notez que vous devez utiliser la séquence d'échappement slash avec des guillemets - les doubles-doubles ne fonctionneront pas - mais que les singles ne sont pas affectés.

À partir de là, vous pouvez constater que les littéraux JSON à guillemets simples ne sont pas affectés par le codage de chaîne C # utilisé. C'est pourquoi je dis que les guillemets simples sont mieux à utiliser dans un blob JSON codé en dur que les doublons - ils demandent moins de travail et sont plus lisibles.

9
Andrew Gray

Écrire JSON en ligne avec c # dans les chaînes est un peu fastidieux à cause des guillemets requis par le standard JSON qui doivent être échappés en c # comme indiqué dans les autres réponses. Une solution de contournement élégante consiste à utiliser c # dynamic et JObject de 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
// .....  

Voir https://www.newtonsoft.com/json/help/html/CreateJsonDynamic.htm .

2
alastairtree

Une approche simple consiste à copier le JSON dans un fichier .json et à lire ce fichier dans le code

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