2016-07-26 4 views
0

Ich arbeite mit PHP auf dem Back-End und C# auf Client-Seite. Also, wenn ich mehrzeilige Nachricht vom Server in JSON erhalte ich dies tun:JSON Fehler mit r n in C# Zeichenfolge

dynamic answer = JsonConvert.DeserializeObject(resultHttpPost); 
string body = answer.body; 

Aber ich erhalte eine Fehlermeldung:

Symbol of new line is in constant

diesen Weil ich kann nicht Multilinien-Nachrichten verwenden.

ich so versucht und es hat nicht funktioniert entweder

resultHttpPost = resultHttpPost.Replace("\\n", "\n").Replace("\\r", "\r").Replace("\\t", "\t"); 
    project.Variables["var_dump"].Value = resultHttpPost; 
dynamic answer = JsonConvert.DeserializeObject(resultHttpPost); 

So wie ich es funktioniert?

Beispiel für JSON:

{"status":"response_ok","message":{"body":"Hi test,\r\n\r\ntesting it, lorem ipsum lorem ipsumlorem ipsumlorem ipsumlorem ipsum.\r\n\r\nSignature","id":1015,"id_thread":741},"id_thread":741} 
+0

Beispiel "ResultHttpPost" -Wert anzeigen. – BWA

+0

{"status": "response_ok", "nachricht": {"body": "Hi test, \ r \ n \ r \ ntests, lorem ipsum lorem ipsumlorem ipsumlorem ipsumlorem ipsum. \ R \ n \ r \ nUnterschrift" , "id": 1015, "id_thread": 741}, "id_thread": 741} – Nelex

+0

@Nelex warum versuchst du, newline * überhaupt zu ersetzen *? C#, Json.NET und Json selbst können mit Zeilenumbrüchen umgehen. Der Code, den du gepostet hast, macht auch keinen Sinn - wo hast du "\\ r" gefunden? Sind Sie verwirrt über die Darstellung von Newlines im Debugger? Haben Sie versucht, die rohe Zeichenfolge zu deserialisieren? –

Antwort

1

Beispielcode:

using System; 
using System.Collections.Generic; 
using Newtonsoft.Json; 

public class Message 
{ 
    public string body { get; set; } 
    public int id { get; set; } 
    public int id_thread { get; set; } 
} 

public class RootObject 
{ 
    public string status { get; set; } 
    public Message message { get; set; } 
    public int id_thread { get; set; } 
} 

public class Program 
{ 
    static public void Main() 
    { 
     string j = "{\"status\":\"response_ok\",\"message\":{\"body\":\"Hi test,\r\n\r\ntesting it, lorem ipsum lorem ipsumlorem ipsumlorem ipsumlorem ipsum.\r\n\r\nSignature\",\"id\":1015,\"id_thread\":741},\"id_thread\":741} "; 

     RootObject ro = JsonConvert.DeserializeObject<RootObject>(j); 

     Console.WriteLine(ro.message.body); 
    } 

} 

Ergebnis:

Hi test,

testing it, lorem ipsum lorem ipsumlorem ipsumlorem ipsumlorem ipsum.

Signature

Ist exaple json problematisch json?

+0

Mit anderen Worten, Sie können das Problem nicht reproduzieren? –

+0

@ PanagiotisKanavos Ja, diese Zeichenfolge sollte ohne Probleme deserialisieren. – BWA

+0

Höchstwahrscheinlich verwechselte das OP die Zeilenumbrüche für tatsächliche Zeichen und versuchte zu ersetzen, was nicht da war. –

1

Ich bemerke, dass Sie dies mit ASP.NET verwenden.

Es ist wahrscheinlich, weil Sie es tatsächlich serialisieren zweimal. In meinem Fall habe ich die serialize-Methode von Json.NET aufgerufen, und dann wurde die resultierende Zeichenfolge von einem Web-API-Controller zurückgegeben und selbst die JSON-Zeichenfolge serialisiert (die ASP.NET-Web-API verwendet intern Json.NET) und JSON in JSON serialisiert Ergebnisse in der \r\n erscheinen überall.

+0

Nein, ich bin 100% sicher, dass es nur einmal serialisiert wurde, ich habe es einfach nochmal überprüft. – Nelex