Ich versuche, den folgenden Code zu verwenden, um einen anonymen Typ für JSON zu serialisieren:
var serializer = new DataContractJsonSerializer(thing.GetType());
var ms = new MemoryStream();
serializer.WriteObject(ms, thing);
var json = Encoding.Default.GetString(ms.ToArray());
Ich erhalte jedoch die folgende Ausnahme, wenn dies ausgeführt wird:
Typ '<> f__AnonymousType1`3 [System.Int32, System.Int32, System.Object []]' kann nicht serialisiert werden. Markieren Sie es mit dem DataContractAttribute-Attribut und markieren Sie alle Mitglieder, die Sie serialisieren möchten, mit dem DataMemberAttribute-Attribut. Weitere unterstützte Typen finden Sie in der Microsoft .NET Framework-Dokumentation.
Ich kann keine Attribute auf einen anonymen Typ anwenden (soweit ich weiß). Gibt es eine andere Möglichkeit, diese Serialisierung durchzuführen, oder fehlt mir etwas?
System.Web.Extensions.dll
eineusing System.Web.Script.Serialization;
Anweisung referenzieren und hinzufügen .Wie bereits erwähnt, ist Newtonsoft JSON.NET eine gute Option. Hier ist ein spezielles Beispiel für eine einfache JSON-Serialisierung:
Ich habe festgestellt, dass es sich um eine sehr flexible und vielseitige Bibliothek handelt.
quelle
Sie können meinen ServiceStack JsonSerializer ausprobieren, der derzeit der schnellste .NET JSON-Serializer ist . Es unterstützt die Serialisierung von DataContracts, beliebigen POCO-Typen, Schnittstellen, spät gebundenen Objekten, einschließlich anonymer Typen usw.
Grundlegendes Beispiel
Hinweis: Verwenden Sie Microsoft JavaScriptSerializer nur, wenn die Leistung für Sie nicht wichtig ist, da ich sie aus meinen Benchmarks herausnehmen musste, da sie bis zu 40x-100x langsamer ist als die anderen JSON-Serializer.
quelle
Bitte beachten Sie, dass dies aus dem Jahr 2008 stammt. Heute würde ich argumentieren, dass der Serializer eingebaut sein sollte und dass Sie wahrscheinlich Swagger + -Attribute verwenden können, um Verbraucher über Ihren Endpunkt zu informieren und Daten zurückzugeben.
Ich würde argumentieren, dass Sie keinen anonymen Typ serialisieren sollten . Ich kenne die Versuchung hier; Sie möchten schnell einige Wegwerftypen generieren, die nur in einer Umgebung mit losem Typ, auch bekannt als Javascript, im Browser verwendet werden. Trotzdem würde ich einen tatsächlichen Typ erstellen und ihn als serialisierbar dekorieren. Dann können Sie Ihre Webmethoden stark eingeben. Während dies für Javascript kein Jota ausmacht, fügt es der Methode eine Selbstdokumentation hinzu. Jeder einigermaßen erfahrene Programmierer kann sich die Funktionssignatur ansehen und sagen: "Oh, das ist Typ Foo! Ich weiß, wie das in JSON aussehen sollte."
Sie können jedoch JSON.Net ausprobieren , um die Serialisierung durchzuführen . Ich habe keine Ahnung, ob es funktionieren wird
quelle
Der schnellste Weg, den ich gefunden habe, war folgender:
Namespace: System.Web.Script.Serialization.JavaScriptSerializer
quelle
Sie könnten Newtonsoft.Json verwenden.
quelle
Angenommen, Sie verwenden dies für einen Webdienst, können Sie einfach das folgende Attribut auf die Klasse anwenden:
Dann das folgende Attribut für jede Methode, die Json zurückgeben soll:
Und setzen Sie den Rückgabetyp für die Methoden auf "Objekt".
quelle
quelle