Frage

Ich bin mir nicht sicher, ob ich mein JSON-Objekt doppelt serialisiere, aber die Ausgabe führt zu einem unerwünschten Format.Ich mache den REST-Endpunkt über eine ArcGIS Server-Objekterweiterung (REST SOE) verfügbar.Ich habe auch kürzlich implementiert JSON.Net was mir im Wesentlichen erlaubte, mehrere Codezeilen zu entfernen.

Hier ist also der Handler, der das Kernstück ist, das die Daten für den Service erstellt (für Sie Nicht-GIS-Peeps).

private byte[] SearchOptionsResHandler(NameValueCollection boundVariables, string outputFormat, string requestProperties, out string responseProperties)
    {
        responseProperties = null;

        JsonObject result = new JsonObject();                                 

        // Towns
        DataTable dataTableTowns = GetDataTableTowns();
        String jsonStringTowns = JsonConvert.SerializeObject(dataTableTowns); 
        result.AddString("Towns", jsonStringTowns);

        // GL_Description
        DataTable dataTableGLDesc = GetDataTableGLDesc();
        String jsonStringGLDesc = JsonConvert.SerializeObject(dataTableGLDesc);                       
        result.AddString("GLDesc", jsonStringGLDesc);

        return Encoding.UTF8.GetBytes(result.ToJson());
    }

Das Ergebnis ist hässlicher JSON:

{
    "Towns": "[{\"Column1\":\"ANSONIA\"},{\"Column1\":\"BETHANY\"},{\"Column1\":\"BLOOMFIELD\"}]",
    "GLDesc": "[{\"Column1\":\"Commercial\"},{\"Column1\":\"Industrial\"},{\"Column1\":\"Public\"}]"
}

Liegt es daran, dass ich es irgendwie doppelt serialisiere?Danke, dass du dir das angesehen hast.

War es hilfreich?

Lösung

Ja, Sie serialisieren es doppelt.Es ist genau dort in Ihrem Code.

Für jede Ihrer Datentabellen, dataTableTowns und dataTableGLDesc, du rufst an JsonConvert.SerializeObject() um sie in JSON-Zeichenfolgen zu konvertieren, die Sie dann zu einem Ergebnis hinzufügen JsonObject.Sie rufen dann an ToJson() auf das Ergebnis, das vermutlich das Ganze wieder zu JSON serialisiert.

JsonObject ist nicht Teil von Json.Net , während JsonConvert ist, also würde ich empfehlen, das eine oder andere zu verwenden.Im Allgemeinen möchten Sie einfach alles zu einem einzigen Ergebnisobjekt zusammenfassen und das Ganze dann am Ende einmal serialisieren.Hier ist, wie ich es machen würde mit Json.Net verwenden eines anonymen Objekts zum Speichern des Ergebnisses:

var result = new 
{ 
    Towns = GetDataTableTowns(),
    GLDesc = GetDataTableGLDesc() 
};

string json = JsonConvert.SerializeObject(result);
return Encoding.UTF8.GetBytes(json);

Hier ist die Ausgabe:

{
    "Towns":[{"Column1":"ANSONIA"},{"Column1":"BETHANY"},{"Column1":"BLOOMFIELD"}],
    "GLDesc":[{"Column1":"Commercial"},{"Column1":"Industrial"},{"Column1":"Public"}]
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top