Ich habe ein Objektmodell, das so aussieht:
public MyObjectInJson
{
public long ObjectID {get;set;}
public string ObjectInJson {get;set;}
}
Die Eigenschaft ObjectInJson
ist eine bereits serialisierte Version eines Objekts, das verschachtelte Listen enthält. Im Moment serialisiere ich die Liste MyObjectInJson
manuell wie folgt:
StringBuilder TheListBuilder = new StringBuilder();
TheListBuilder.Append("[");
int TheCounter = 0;
foreach (MyObjectInJson TheObject in TheList)
{
TheCounter++;
TheListBuilder.Append(TheObject.ObjectInJson);
if (TheCounter != TheList.Count())
{
TheListBuilder.Append(",");
}
}
TheListBuilder.Append("]");
return TheListBuilder.ToString();
Ich frage mich, ob ich diese Art von gefährlichem Code durch ersetzen JavascriptSerializer
und die gleichen Ergebnisse erzielen kann. Wie würde ich das machen?
Vielen Dank.
System.Web.Extensions
zu verwendenSystem.Web.Script.Serialization
: stackoverflow.com/a/18746092/1599699 stackoverflow.com/a/19299695/1599699Antworten:
Bei Verwendung von .Net Core 3.0 oder höher;
Standardmäßig wird die integrierte
System.Text.Json
Parser-Implementierung verwendet.z.B
Alternativ stehen andere, weniger gängige Optionen wie Utf8Json- Parser und Jil zur Verfügung : Diese bieten möglicherweise eine überlegene Leistung , wenn Sie sie wirklich benötigen, müssen Sie jedoch die entsprechenden Pakete installieren.
Wenn Sie mit .Net Core 2.2 oder früher nicht weiterkommen;
Standardmäßig wird Newtonsoft JSON.Net als JSON-Parser erster Wahl verwendet.
z.B
Möglicherweise müssen Sie zuerst das Paket installieren.
Weitere Informationen finden Sie in der Antwort, aus der diese Informationen stammen .
Nur als Referenz war dies die ursprüngliche Antwort vor vielen Jahren;
quelle
Sie können auch Json.NET verwenden. Laden Sie es einfach unter http://james.newtonking.com/pages/json-net.aspx herunter , extrahieren Sie die komprimierte Datei und fügen Sie sie als Referenz hinzu.
Dann serialisieren Sie einfach die Liste (oder ein beliebiges Objekt) wie folgt:
Update: Sie können es auch über den NuGet Package Manager (Tools -> NuGet Package Manager -> Package Manager Console) zu Ihrem Projekt hinzufügen:
Dokumentation: Serialisierung von Sammlungen
quelle
Es gibt zwei gängige Methoden, um dies mit integrierten JSON-Serialisierern zu tun:
JavaScriptSerializer
DataContractJsonSerializer
Beachten Sie, dass für diese Option die Definition eines Datenvertrags für Ihre Klasse erforderlich ist:
quelle
quelle
.NET unterstützt bereits seit Version 3.5 die grundlegende Json-Serialisierung über den System.Runtime.Serialization.Json-Namespace und die DataContractJsonSerializer- Klasse. Wie der Name schon sagt, berücksichtigt DataContractJsonSerializer alle Datenanmerkungen, die Sie Ihren Objekten hinzufügen, um die endgültige Json-Ausgabe zu erstellen.
Dies kann nützlich sein, wenn Sie bereits kommentierte Datenklassen haben, mit denen Sie Json in einen Stream serialisieren möchten, wie unter Gewusst wie: Serialisieren und Deserialisieren von JSON-Daten beschrieben . Es gibt Einschränkungen, aber es ist gut genug und schnell genug, wenn Sie Grundbedürfnisse haben und Ihrem Projekt keine weitere Bibliothek hinzufügen möchten.
Der folgende Code serialisiert eine Liste des Konsolenausgabestreams. Wie Sie sehen, ist es ein etwas ausführlicher als Json.NET und nicht typsicher (dh keine Generika).
Auf der anderen Seite bietet Json.NET eine viel bessere Kontrolle darüber, wie Sie Json generieren. Dies ist SEHR praktisch, wenn Sie .NET-Klassen Namen von Javascript-freundlichen Namen zuordnen, Daten json formatieren usw. müssen.
Eine weitere Option ist ServiceStack.Text , Teil des ServicStack ... -Stacks , der eine Reihe sehr schneller Serialisierer für Json, JSV und CSV bereitstellt.
quelle
Aufbauend auf einer Antwort aus einem anderen Beitrag. Ich habe mir eine allgemeinere Methode zum Erstellen einer Liste ausgedacht, bei der der dynamische Abruf mit Json.NET Version 12.x verwendet wird
Aufruf zur Bearbeitung
oder dieser Aufruf zu verarbeiten
quelle