/ / Linq-Ergebnisse direkt in JSON serialisieren - c #, linq, json, Serialisierung, Objektabfrage

Serialisieren Sie Linq-Ergebnisse direkt in JSON - c #, linq, json, Serialisierung, Objektabfrage

Ich entwickle einen WebService, der linq to ausführtsql db und die Ergebnisse in eine VAR-Variable setzen. Dann möchte ich das Ergebnis in VAR zu json-Format mit JavaScript Serializer (c #) serialisieren. Etwas wie das:

var sb= from p in ent.people .........
System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new       System.Runtime.Serialization.Json.DataContractJsonSerializer(sb.GetType());
MemoryStream ms = new MemoryStream();
serializer.WriteObject(ms, sb);
string json = System.Text.Encoding.Default.GetString(ms.ToArray());

Aber ich bekomme eine Fehlermeldung wie folgt:

Type      'System.Data.Objects.ObjectQuery`1[<>f__AnonymousType2d`5[System.String,System.Nu llable`1[System.Int32],System.Nullable`1[System.Int32],System.Int32,System.String]]' cannot be serialized.

Denke daran, es mit dem zu markierenDataContractAttribute-Attribut und markiert alle seine Member, die mit dem DataMemberAttribute-Attribut serialisiert werden sollen. Wenn es sich bei dem Typ um eine Sammlung handelt, sollten Sie diese mit CollectionDataContractAttribute markieren. Weitere unterstützte Typen finden Sie in der Microsoft .NET Framework-Dokumentation.

WIE KANN ICH LINQ-ERGEBNISSE DIREKT JSON SERIALISIEREN? Vielen Dank für alle Antworten! Enrico

Antworten:

4 für die Antwort № 1

DataContractJsonSerializer unterstützt keine anonymen Objekte. Wenn Sie anonyme Objekte serialisieren möchten, können Sie die JavaScriptSerializer Klasse:

var sb = from p in ent.people .........
var serializer = new JavaScriptSerializer();
string json = serializer.Serialize(sb);

0 für die Antwort № 2

Bei meinem letzten Job haben wir dieses Verhalten gesehen und es hat etwas gedauert, um es zu umgehen.

Zuerst möchten Sie das IQ Toolkit, verfügbar vonCodePlex kostenlos. In seinen Bibliotheken ist ein "PartialEvaluator", der die Komplexität vieler Expressionsbäume reduzieren kann, indem er Knoten findet, die immer zu einfacheren Knoten auswerten, und Referenzen auf "externe Closures" durch Konstanten ersetzt. Sie möchten Ihr IQueryable ausführen, bevor Sie versuchen, es zu serialisieren.

Dann, um den JSON DataContract zu verwendenSerialisierer müssen Sie die Klasse, die Sie als DataContract serialisieren möchten, einrichten. Es gibt Tutorials dafür, dies überall zu tun; im Grunde dekorieren Sie nur die Klasse, alle enthaltenen Klassen und die Elemente, die Sie mit Attributen serialisieren möchten.

Sobald diese beiden Dinge vorhanden sind, sollten Ihr Objekt und sein IQueryable-Member mit dem DataContractJsonSerializer zu JSON serialisiert werden können.


0 für die Antwort № 3

Sie können verwenden Newtonsoft.JSON dafür

Heres ist die Syntax

var sb = from p in ent.people .........
string json = JsonConvert.SerializeObject(sb);