2017-07-05 7 views
1

z.Doppelte Anführungszeichen in C# erlauben keine mehrzeilige

string str = "{\"aps\":{\"alert\":\"" + title + "" + message + "\"}}"; 

Ich muss es machen wie zur besseren Lesbarkeit:

string str = " 
{ 
    \"aps\": 
     { 
      \"alert\":\"" + title + "" + message + "\" 
     } 
}"; 

Wie dies zu erreichen, bitte vorschlagen.

+0

Sie können einfache Anführungszeichen anstelle von doppelten Anführungszeichen verwenden. –

+0

@ X-TECH: Nicht, wenn das OP mit gültigem JSON enden will. –

Antwort

7

Wenn Sie wirklich diese wörtliche in einem String tun müssen, ich wörtliche eine wortgetreue Zeichenfolge verwenden würde (das @ Präfix). In verbatim String-Literalen müssen Sie "" verwenden, um ein Doppelzitat darzustellen. Ich würde vorschlagen, interpolierte Stringliterale zu verwenden, um die Einbettung von title und message sauberer zu machen. Das heißt, Sie müssen die {{ und }} jedoch verdoppeln. Also würden Sie haben:

string title = "This is the title: "; 
string message = "(Message)"; 
string str = [email protected]" 
{{ 
    ""aps"": 
    {{ 
     ""alert"":""{title}{message}"" 
    }} 
}}"; 
Console.WriteLine(str); 

Ausgang:

{ 
    "aps": 
    { 
     "alert":"This is the title: (Message)" 
    } 
} 

Dies ist jedoch noch zerbrechlicher als einfach JSON Aufbau eines JSON-API - wenn der Titel oder eine Mitteilung zitiert zum Beispiel enthält, Sie Am Ende wird ungültiges JSON angezeigt. Ich würde nur Json.NET verwenden, zum Beispiel:

string title = "This is the title: "; 
string message = "(Message)"; 
JObject json = new JObject 
{ 
    ["aps"] = new JObject 
    { 
     ["alert"] = title + message 
    } 
}; 
Console.WriteLine(json.ToString()); 

Das IMO viel sauberer ist, sowie robuster zu sein.

+0

@furqanms: Sorry, ich weiß nicht, was du meinst. Der Code, den ich angegeben habe, erzeugt keine zusätzlichen Klammern, und es ist unklar, welchen Code du verwendest. –

+0

Sorry, es war mein Fehler, JObject ist großartig für die Lesbarkeit, Danke @Jon Skeet –

+0

Dein Json.NET ist für mich die richtige Antwort, es hat für mich funktioniert und mich aus einem Loch während der Entwicklung einer App auch so Vielen Dank für teilen –

1

Sie könnten verwenden, welche X-Tech gesagt hat, verwenden Sie zusätzliche Verkettung Operatoren ('+') in jeder Zeile, oder das Symbol '@' ist:

string str = @" 
     { 
      'aps': 
       { 
        'alert':'" + title + "" + message + @"' 
       } 
     }"; 

Seit seiner JSON, können Sie einfache Anführungszeichen statt doppelte Anführungszeichen.

Über '@': Multiline String Literal in C#

+0

Beachten Sie hier, dass das @ in der drittletzten Zeile auch zum Ende hin benötigt wird, weil eine neue mehrzeilige Zeichenfolge beginnt. Jedes Mal, wenn Sie eine neue mehrzeilige Zeichenfolge beginnen, setzen Sie das Symbol "@". –

+1

Einfache Anführungszeichen sind in JSON nicht wirklich gültig. Sie arbeiten in vielen Parsern, aber sie verletzen https://tools.ietf.org/html/rfc7159 –

+0

@JonSkeet Danke, dass Sie darauf hingewiesen haben. Aber ich sehe nicht, wie man nur doppelte Anführungszeichen verwenden und eine saubere mehrzeilige Zeichenfolge ohne Verwendung von einfachen Anführungszeichen haben könnte ... –

Verwandte Themen