it-swarm.com.de

Hardcoded JSON-String in Variable speichern

Ich habe ein Problem mit dem Speichern dieser Json-Zeichenfolge in einer Variablen. Es muss etwas Dummes sein, was ich hier vermisse

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

Wenn Sie das @ -Zeichen verwenden, müssen Sie die "Es" -Schriften ("s") als Escapezeichen nach dem ersten "" verwenden. Die zwei Optionen sind also:

verwenden Sie nicht das @ und verwenden Sie \, um das " 

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

oder doppelte Anführungszeichen verwenden 

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

Zunächst einmal werde ich das hier rausschmeißen. Aus diesem Grund verwende ich in JSON-Blobs gern einfache Anführungszeichen.

Aber viel hängt davon ab, wie Sie Ihre Variable string deklarieren.

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

... Dies ist eine ASCII-kodierte Zeichenfolge, die mit einfachen Anführungszeichen gut funktionieren sollte. Sie können die Escape-Sequenz für doppelte Anführungszeichen verwenden, um die Doubles zu entgehen, aber eine einfache Anführungszeicheneinstellung ist sauberer. Beachten Sie, dass "" in diesem Fall nicht funktioniert.

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

... Diese Deklaration verwendet die standardmäßige String-Codierung von C #, Unicode. Beachten Sie, dass Sie die Slash-Escape-Sequenz mit doppelten Anführungszeichen verwenden müssen - Double-Doubles funktionieren nicht - Singles sind jedoch nicht betroffen.

Daraus können Sie ersehen, dass JSON-Literale mit einem Anführungszeichen von der verwendeten C # -Stringcodierung nicht betroffen sind. Aus diesem Grund sage ich, dass einfache Anführungszeichen in einem hart codierten JSON-Blob besser zu verwenden sind als Doubles - sie sind weniger arbeitsfähig und lesbarer.

9
Andrew Gray

Das Schreiben von JSON inline mit c # in Strings ist etwas unklar, da der JSON-Standard doppelte Anführungszeichen vorschreibt, die in c # wie in den anderen Antworten gezeigt werden müssen. Eine elegante Problemumgehung ist die Verwendung von c # dynamic und JObject von 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
// .....  

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

2
alastairtree

Ein einfacher Ansatz besteht darin, die JSON-Datei in eine JSON-Datei zu kopieren und diese Datei im Code zu lesen

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