2 Stimmen

Arbeiten mit JSON auf der Server-Seite in ASP.NET und C#

Ich habe ein ASP.NET-Webformular, das JQuery auf der Client-Seite verwendet. Ich habe eine Benutzeroberfläche, die eine Sammlung von Objekten erstellt und sie in JSON speichert. Nachdem meine clientseitige Implementierung abgeschlossen ist, muss ich nun mit diesen Informationen arbeiten, wenn der Benutzer auf eine Schaltfläche klickt. Wenn diese Schaltfläche angeklickt wird, muss ich diese JSON-Sammlung in einer Schleife durchlaufen und die Einträge validieren. Mein Problem ist, ich bin nicht sicher, wie man es tun.

// Client-Side Code
var myCollection = {
  "data": [
  ]
};

// Server-Side Code
protected void myButton_Click(object sender, EventArgs e)
{
  // Parse JSON
}

Jedes Element der Sammlung wird in der Eigenschaft "data" gespeichert. Wie kann ich eine Schleife durch die JSON-Sammlung auf der Server-Seite? Ich dachte daran, die JSON-Daten in ein verborgenes HTML-Element zu packen, aber das hörte sich nicht gut an, und ich könnte mir eine gute Lösung dafür vorstellen.

Dankeschön

1voto

jvenema Punkte 43201

Wie Sie sie an den Server senden, bleibt Ihnen überlassen - ein verstecktes Feld, ein AJAX-Aufruf, was immer Sie bevorzugen. Sobald Sie die Zeichenfolge auf dem Server haben, benötigen Sie 2 Dinge:

  1. Eine C#-Server-seitige Darstellung dieses Objekts
  2. Ein Konverter zum Mitnehmen von JSON in diese C#-Darstellung.

Lassen Sie uns Ihr Beispiel ein wenig anpassen, denn "myCollection" in Ihrem Beispiel ist ein Objekt, keine Sammlung. Wir nennen es also myObject. Zweitens nehmen wir an, dass "data" ein Array von Strings ist. Das kann alles Mögliche sein, aber wir wollen es einfach halten.

var myObject = {
  data: ["string1","string2"]
};

Wir werden auch davon ausgehen, dass Sie die DataContractJsonSerializer verwenden, so dass Sie leicht die zwei verschiedenen Case-Stile zuordnen können ... JavaScript ist in der Regel camelCase, und C # ist in der Regel ProperCase. Also, in C#, würde dies sein:

[DataContract(Name="myObjectType")]
public class MyObjectType{
  [DataMember(Name="data")]
  public string[] Data { get; set; }
}

Jetzt haben Sie zwei Darstellungen der gleichen Struktur, eine in c#, eine in JavaScript. Um von einer in die andere zu konvertieren, können wir den eingebauten DataContractJsonSerializer verwenden, wie hier:

public static T Deserialize<T>(string json)
{
    using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
    {
      DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
      return (T)serializer.ReadObject(ms);
    }
}

...was zu einem endgültigen Aufruf von:

MyObjectType myObject = Deserialize<MyObjectType>(incomingString);

0voto

Brian Mains Punkte 50145

JSON im ausgeblendeten Feld ist eine gültige Methode, da die Daten dann an den Server gesendet werden würden. Sie könnten dann die Komponente System.Web.Script.Serialization.JavaScriptSerializer verwenden, um die Daten zu deserialisieren (in ein Wörterbuch) und auf diese Weise auf die Daten zuzugreifen. Ich bin mir nicht 100% sicher, wie die Array-Daten aus diesem Prozess hervorgehen. Es gibt auch andere Tools wie JSON.NET, um JSON zu parsen.

Eine andere Möglichkeit ist der Aufruf eines Webdienstes, der jedoch nicht den Lebenszyklus der Seite durchläuft.

HTH.

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