webentwicklung-frage-antwort-db.com.de

Bringen Sie Json zurück, aber es enthält Rückwärts-Schrägstriche "\", die ich nicht möchte

Ich verwende MVC4 Web-API, c # und möchte Json mit Json.net zurückgeben.

das Problem ist, dass es mit "Rückwärtsschrägstrichen" kommt.

Ich habe diesen Code auch zu Global.asax hinzugefügt.

GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();

hier ist, was es zurückgibt.

"{\"cid\":1,\"model\":\"WT50JB\",\"detail\":\"sdf??\",\"unit\":2,\"time_in\":\"2012-12-11T19:00:00\",\"time_out\":\"2012-12-12T13:00:06.2774691+07:00\",\"time_used_dd\":0.0,\"time_used_hh\":0.0}"

also was ich sehen will ist

{"cid":1,"model":"WT50JB","detail":"sdf??","unit":2,"time_in":"2012-12-11T19:00:00","time_out":"2012-12-12T13:08:50.5444555+07:00","time_used_dd":0.0,"time_used_hh":0.0}

hier ist JsonConvertor

string json = JsonConvert.SerializeObject(myObj);
35
riseres

ich habe die Lösung hier gefunden

return new HttpResponseMessage() 
{
    Content = new StringContent(json, System.Text.Encoding.UTF8, "application/json")
};
19
riseres

Ich hatte das gleiche Problem, bis vor wenigen Augenblicken. Es stellte sich heraus, dass ich die JSON-Zeichenfolge "doppelt serialisiert" hatte. Ich benutze einen jQuery $.getJson( AJAX - Aufruf einer JsonResult Controller-Aktion. Und weil die Aktion ein generisches C # List<t> erstellt, dachte ich, dass ich JSON.net/NewtonSoft verwenden musste, um das generische C # List<t> in ein JSON-Objekt zu konvertieren, bevor das JSON-Objekt folgendermaßen zurückgegeben wurde:

return Json(fake, JsonRequestBehavior.AllowGet);

Die JsonConvert.SerializeObject(-Methode musste ich doch nicht verwenden, offensichtlich wird diese return die Serialisierung für uns konvergieren.

Ich hoffe es hilft dir oder jemand anderem.

26
id.ot

Wahrscheinlich handelt es sich bei den Schrägstrichen um ein Artefakt, weil Sie sie aus dem VisualStudio-Debugger kopiert haben. Der Debugger zeigt alle Zeichenfolgen so an, dass sie in den C/C # -Code eingefügt werden könnten. Sie sind nicht wirklich in den übertragenen Daten.

BTW: Diese Schrägstriche sind rückwärts Schrägstriche. Ein Schrägstrich würde folgendermaßen aussehen: /.

9
Codo
using Newtonsoft.Json.Linq;
string str = "Your String with Back Slashes";
str = JToken.Parse(str).ToString(); `// Now You will get the Normal String with "NO SLASHES"`
9
Maulik

Um ein "vollständiges" Codefragment zu sehen, habe ich eine Lösung gefunden:

    [AllowAnonymous]
    [HttpGet]
    public HttpResponseMessage GetAllMessages()
    {

        try
        {
            //Load Data Into List
            var mm = new MessageManager();
            List<Message> msgs = mm.GetAllMessages();

            //Convert List Into JSON
            var jsonmsgs = JsonConvert.SerializeObject(msgs);

            //Create a HTTP response - Set to OK
            var res = Request.CreateResponse(HttpStatusCode.OK);

            //Set the content of the response to be JSON Format
            res.Content = new StringContent(jsonmsgs, System.Text.Encoding.UTF8, "application/json");

            //Return the Response
            return res;
        }
        catch (Exception exc)
        {
            return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, exc);
        }
    }
3
Andrew Birks

Nach stundenlangen Versuchen, dies herauszufinden, schien mir eine populäre Antwort auf diese Frage genau zu sein. Aber nicht so, wie ich es mir vorgestellt habe.

Mein Code war sehr einfach:

this.Request.CreateResponse(HttpStatusCode.Accepted, new JavaScriptSerializer().Serialize(obj));

Ich war mir sicher, dass die populäre Antwort des "Doppelserialisierens" nicht auf mich zutrifft. Schließlich habe ich mein Objekt nur einmal explizit mit JSON serialisiert.

Ich habe diesen Ausschnitt ausprobiert:

new StringContent(json, System.Text.Encoding.UTF8, "application/json")

Was schien nicht einmal meine Daten zu enthalten! Stattdessen habe ich Folgendes erhalten:

{
  "Headers": [
    {
      "Key": "Content-Type",
      "Value": [
        "application/json; charset=utf-8"
      ]
    }
  ]
}

Hmmm .. Aber siehe da! Ein genauerer Blick auf meine ursprüngliche Antwort in der Swagger-Benutzeroberfläche und nach dem Kopieren und Einfügen in einen JSON-Beautifier - ich war tatsächlich irgendwie "doppelt serialisiert". Mit folgendem Code wurde die korrekte JSON-Antwort erhalten :

 this.Request.CreateResponse(HttpStatusCode.Accepted, obj);

Stimmt! Senden Sie einfach das serialisierbare Objekt direkt, keine Notwendigkeit, JSON zu serialisieren! Anscheinend serialisiert die Antwort Objekte automatisch in JSON. Hoffe das hilft!

EDIT: Wenn Sie wie in der Datenbank mit einem JSON-String beginnen, können Sie den String in ein Objekt deserialisieren und dieses Objekt zurückgeben - wie folgt:

object obj = new JavaScriptSerializer().DeserializeObject(json);
this.Request.CreateResponse(HttpStatusCode.Accepted, obj);
2
Heriberto Lugo

Ich habe das gleiche Problem, die Antwort enthält "", wenn ich benutze

        JObject res = processRequst(req);
        String szResponse = res.ToString(Formatting.None);
        return Request.CreateResponse<string>(HttpStatusCode.OK, szResponse);

Und diese Backslashes werden entfernt, wenn ich den obigen Code durch ersetzt habe 

        JObject res = processRequst(req);
        return Request.CreateResponse<JObject>(HttpStatusCode.OK, res);
2
Shiyu

Ich habe festgestellt, dass eine Kombination der Antworten für mich funktioniert. Ich war doppelt serialisiert, wie oben erwähnt. Damit die Serialisierung Ihr JsonProperty-Attribut erkennt, müssen Sie den JsonConvert-Serialisierer verwenden. Zum Beispiel habe ich eine Eigenschaft namens ActualtTarget, die aber als Actual-Target serialisiert werden muss. Das Json-Ergebnis erkennt die JsonProperty beim Serialisieren nicht. Daher habe ich mit JsonConvert eine Serialisierung durchgeführt und den String wie folgt zurückgegeben:

return Content(JsonConvert.SerializeObject(myData));
1
Papa Burgundy

Meistens tritt es aufgrund der doppelten Serialisierung auf. Ich hatte vor einer Weile dasselbe Problem, wo ich eine Sammlung in eine Json-Zeichenfolge serialisieren musste, und selbst nachdem ich verschiedene Problemumgehungen ausprobiert hatte, konnte ich sie nicht lösen. So wurde schließlich der gesamte Serialisierungscode entfernt und das Sammlungsobjekt zurückgegeben, und die Serialisierung wurde standardmäßig erledigt. Versuchen Sie also, den Serialisierungscode zu entfernen und einfach den Rückgabetyp zurückzugeben. Hoffe, es hilft jemandem mit ähnlichen Problemen.

1
Alok Mishra

In meinem Fall habe ich mir die JSON-Zeichenfolge in einem Debugger angesehen und festgestellt, dass der Escape-Befehl hinzugefügt wurde. Und als ich JSON auf die Konsole druckte, gab es keine Escape-Zeichen.

var jsonContent = JsonConvert.SerializeObject(obj); 
Console.WriteLine("HERE NO SLASHES"+ jsonContent); 

original: https://stackoverflow.com/a/46836331/4654957

0
Diego Venâncio

Hier habe ich die Lösung gefunden:

                    response = response.replace("\"", "\\").replace("\\\\", "\"").replace("\\", "");
                JSONArray PackageData = new JSONArray(response);
                SelectSymbolList.clear();
                for (int i = 0; i < PackageData.length(); i++) {
                    JSONObject jsonData = PackageData.getJSONObject(i);
                    // get your array here
                }
0
Sufiyan Ansari

Dies gilt nur, wenn Sie ein Objekt mit JsonSerializerSettings und ContractResolver serialisieren müssen. Dadurch können Sie Zirkelverweise vermeiden.

var serializerSettings = new JsonSerializerSettings
{
    ContractResolver = .... your contract resolver ....,
    DateTimeZoneHandling = DateTimeZoneHandling.Utc,
    DefaultValueHandling = DefaultValueHandling.Ignore,
};

// convert it to JSON with all the ugly slashes
var json = JsonConvert.SerializeObject(existingContact, serializerSettings);

// now deserialize it into an object
var obj = JsonConvert.DeserializeObject(json);

Senden Sie dann das obj-Objekt zurück an Ihren Controller und verwenden Sie JsonResult wie üblich.

0
Chris Auer

Ich habe die Lösung gefunden und für mich gearbeitet (Y)

var yourString = yourString.Replace("\\","");

Ich habe es von hier

0
Sam khan

Ich habe die Lösung gefunden und für mich gearbeitet:

var json = JsonConvert.SerializeObject(sb.ToString(), Formatting.Indented);
response.Content = new StringContent(json, Encoding.UTF8 , "application/json");
0