2017-12-29 36 views
-1

Ich muss POST Json-Daten mit der kyrillischen Zeichen Strings, wie folgt aus:POST Json mit codierten Nicht-ANSII Zeichen

string json = { "message": "Привет" } 

Ich denke, dass ich etwas senden müssen:

string json = { "message": "\u041F\u0440\u0438\u0432\u0435\u0442" } 

Also habe ich versucht, nicht-ASCII-codierte Zeichen zu entkommen: dieses

string privet = "\\u041F\\u0440\\u0438\\u0432\\u0435\\u0442"; 

Aber der Server nicht akzeptiert, weil String ist vorbei wie es ist, mit Doppelschrägstrichen:

string json = { "message": "\\u041F\\u0440\\u0438\\u0432\\u0435\\u0442" } 

UTF-8-Codierung nicht zu akzeptiert:

byte[] bJson = Encoding.UTF8.GetBytes(json); 

Wie String im gewünschten Format zu bekommen?


UPDATE

public class Test 
{ 
    public string message { get; set; } 
} 

Test myTest = new Test{ }; 

myTest.message = "\\u041F\\u0440\\u0438\\u0432\\u0435\\u0442"; 
string json = JsonConvert.SerializeObject(myTest, Formatting.Indented); 

byte[] sbBites = Encoding.ASCII.GetBytes(json); 
Uri url = new Uri("https://example.net"); 
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
request.Method = "POST"; 
request.ContentLength = sbBites.Length; 
request.ContentType = "application/json"; 

using (Stream requestStream = request.GetRequestStream()) 
{ 
    requestStream.Write(sbBites, 0, sbBites.Length); 
} 

HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
+3

Es ist sehr schwer zu sehen, was mit dem Antrag als Frage damit verbundenen nicht das Problem verursacht keinen Code enthalten ... Bitte lesen Sie [MCVE] Anleitung zur Bereitstellung von Code in den Fragen. –

+0

Siehe [diese Q & A] (https://StackOverflow.com/q/1242118/335858) für Informationen zum automatischen Entfernen von JSON-Strings. Sie sollten in der Lage sein, '" Prize "' literal an die Methode zu übergeben und den richtigen Wert zurück zu bekommen. – dasblinkenlight

+0

Haben Sie versucht, die Daten so zu veröffentlichen, wie sie sind, ohne sich damit zu beschäftigen? Ich denke, das sollte funktionieren. – JLRishe

Antwort

0

Hier ist die Lösung

string json = JsonConvert.SerializeObject(myTest, Formatting.Indented, 
new JsonSerializerSettings { StringEscapeHandling = StringEscapeHandling.EscapeNonAscii }); 
0

Es ist kein Wunder, dass der Server den Wert mit einem Bündel von Schrägstriche in die er empfängt, weil der String-Wert Sie es Senden sind eine Reihe von Schrägstriche in ihm hat.

Haben Sie versucht:

public class Test 
{ 
    public string message { get; set; } 
} 

string privet = "Привет"; 

Test myTest = new Test { }; 

myTest.message = privet; 
string json = JsonConvert.SerializeObject(myTest, Formatting.Indented); 

byte[] sbBites = Encoding.UTF8.GetBytes(json); 
Uri url = new Uri("https://example.net"); 
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
request.Method = "POST"; 
request.ContentLength = sbBites.Length; 
request.ContentType = "application/json"; 

using (Stream requestStream = request.GetRequestStream()) 
{ 
    requestStream.Write(sbBites, 0, sbBites.Length); 
} 

HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
+0

Es wird die Zeichenfolge so wie sie ist gesendet, während der Server nur eine entkoppelt akzeptiert. –

+0

gibt es auch 'Serialize (privet, StringEscapeHandling.EscapeNonAscii)' 'Methode, aber es gibt die gleiche doppelte Backslashes-String ... –

Verwandte Themen