2 Stimmen

Leichtes JSON mit DataContractJsonSerializer generieren

Ich versuche, JSON mit C# und DataContractJsonSerializer in .Net 3.5 zu generieren. Das Problem ist, dass ich nicht herausfinden kann, wie man die Struktur korrekt für das Ergebnis, das ich brauche zu bauen.

Ich habe versucht, PHP's assoziative Arrays mit beiden Hashtabellen, Liste Objekte und Arraylists zu reproduzieren, aber kann nicht herausfinden, wie mein Ergebnis in der besten Weise mit DataContractJsonSerializer zu generieren, ohne meine eigene rekursive Schleife für den Aufbau von JSON zu erstellen.

Der nächstliegende Ansatz ist die Verwendung eines Dictionary <String, Dictionary <String, String>>, aber das Ergebnis ist zu groß, da ich die Schlüssel nicht "benennen" kann.

Das habe ich bekommen:

[
   {
      "Key":"status",
      "Value":[
         {
            "Key":"value",
            "Value":"ok"
         }
      ]
   },
   {
      "Key":"1",
      "Value":[
         {
            "Key":"name",
            "Value":"Result1"
         },
         {
            "Key":"details",
            "Value":"Result 1 details"
         }
      ]
   },
   {
      "Key":"2",
      "Value":[
         {
            "Key":"name",
            "Value":"Result2"
         },
         {
            "Key":"details",
            "Value":"Result 2 details"
         }
      ]
   },
   {
      "Key":"caller",
      "Value":[
         {
            "Key":"value",
            "Value":"1135345"
         }
      ]
   }
]

Das ist es, was ich will:

{
   "status":"ok",
   "response":[
      {
         "id":1,
         "name":"Result1"
         "details":"Result 1 details"
      },
      {
         "id":2,
         "name":"Result2"
         "details":"Result 2 details"
      },
      {
         "id":3,
         "name":"Result3"
         "details":"Result 3 details"
    ],
   "caller":"1135345"
}

Hat jemand eine Ahnung, wie ich dieses Stück JSON mit C# generieren kann, ohne das gesamte Json.NET-Framework laden zu müssen? Ich brauche diese so schnell wie möglich generiert werden, wie dieses Projekt zielt darauf ab, eine Website-Suchmaschine zu werden.

2voto

BozoJoe Punkte 5809

Die Verwendung des JavaScriptSerializer anstelle von DataContractJsonSerializer für ein Dictionary entfernt die Key/Value-Json-Attribute und macht sie zu einem "keyed" Array.

http://msdn.microsoft.com/en-us/library/bb412168.aspx

Haben Sie Ihre Klassen mit den [DataContract]- und [DataMember]-Dekoratoren versehen?

http://msdn.microsoft.com/en-us/library/bb412179.aspx

2voto

Artiom Chilaru Punkte 11327

Sie sollten prüfen, ob Sie die JavaScriptSerializer . Es ist Teil des .NET-Frameworks (verteilt in System.Web.Extensions). Um das gewünschte Ergebnis zu erhalten, können Sie dies tun:

var results = new[]
{
    new{id=1,name="Result 1"},
    new{id=2,name="Result 2"},
    new{id=3,name="Result 3"}
};

var js = new JavaScriptSerializer();
var result = js.Serialize(new
{
    status = "ok",
    response = results,
    caller = 1135345
});

Sie können entweder anonyme Klassen oder bereits vorhandene Klassen verwenden. Funktioniert einwandfrei :) Der Rückgabewert dieses Aufrufs würde lauten:

{"status":"ok","response":[{"id":1,"name":"Result 1"},{"id":2,"name":"Result 2"},{"id":3,"name":"Result 3"}],"caller":1135345}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X