/ / Sérialiser les résultats Linq directement vers JSON - c #, linq, json, sérialisation, requête

Sérialiser les résultats Linq directement vers JSON - c #, linq, json, sérialisation, objectquery

Je suis en train de développer un WebService qui excecute linqsql db et mettre les résultats dans une variable VAR. Ensuite, je veux sérialiser le résultat dans VAR au format json à l'aide du sérialiseur javascript (c #). Quelque chose comme ça:

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());

MAIS JE ME SUIS UNE RÉPONSE D'ERREUR COMME CECI

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.

Envisagez de le marquer avec leDataContractAttribute et en marquant tous les membres que vous souhaitez sérialiser avec l'attribut DataMemberAttribute. Si le type est une collection, envisagez de le marquer avec CollectionDataContractAttribute. Consultez la documentation Microsoft .NET Framework pour connaître les autres types pris en charge.

COMMENT PUIS-JE SERIALISER LES RÉSULTATS LINQ DIRECTEMENT SUR JSON ?? Merci beaucoup pour toutes les réponses! Enrico

Réponses:

4 pour la réponse № 1

DataContractJsonSerializer ne prend pas en charge les objets anonymes. Si vous souhaitez sérialiser des objets anonymes, vous pouvez utiliser JavaScriptSerializer classe:

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

0 pour la réponse № 2

Lors de mon dernier emploi, nous avons constaté ce comportement et il a fallu un peu de travail pour le contourner.

Tout d’abord, vous voulez la boîte à outils IQ, disponible àCodePlex gratuitement. Dans ses bibliothèques, un "PartialEvaluator" peut réduire la complexité de nombreux arbres d’expression en recherchant les nœuds qui s’évaluent toujours en nœuds simples et en remplaçant les références aux "fermetures externes" par des constantes. Vous voudrez exécuter votre IQueryable avant de tenter de le sérialiser.

Ensuite, pour utiliser le JSON DataContractsérialiseur, vous devez configurer la classe que vous souhaitez sérialiser en tant que DataContract. Il existe des tutoriels pour le faire partout; En gros, vous ne décorez que la classe, les classes contenues et les membres que vous souhaitez sérialiser avec des attributs.

Une fois ces deux éléments en place, votre objet et son membre IQueryable doivent pouvoir être sérialisés en JSON à l'aide de DataContractJsonSerializer.


0 pour la réponse № 3

vous pouvez utiliser Newtonsoft.JSON pour ça

Heres "s la syntaxe

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