J'essaie d'utiliser le code suivant pour sérialiser un type anonyme en JSON:
var serializer = new DataContractJsonSerializer(thing.GetType());
var ms = new MemoryStream();
serializer.WriteObject(ms, thing);
var json = Encoding.Default.GetString(ms.ToArray());
Cependant, j'obtiens l'exception suivante lorsque cela est exécuté:
Le type '<> f__AnonymousType1`3 [System.Int32, System.Int32, System.Object []]' ne peut pas être sérialisé. Envisagez de le marquer avec l'attribut DataContractAttribute et de marquer tous ses membres que vous souhaitez sérialiser avec l'attribut DataMemberAttribute. Consultez la documentation de Microsoft .NET Framework pour les autres types pris en charge.
Je ne peux pas appliquer d'attributs à un type anonyme (pour autant que je sache). Existe-t-il une autre façon de faire cette sérialisation ou est-ce que je manque quelque chose?
System.Web.Extensions.dll
et d'ajouter uneusing System.Web.Script.Serialization;
déclaration.Comme d'autres l'ont mentionné, Newtonsoft JSON.NET est une bonne option. Voici un exemple spécifique de sérialisation JSON simple:
J'ai trouvé que c'était une bibliothèque très flexible et polyvalente.
la source
Vous pouvez essayer mon ServiceStack JsonSerializer, c'est le sérialiseur .NET JSON le plus rapide du moment. Il prend en charge la sérialisation des DataContract, de tout type POCO, des interfaces, des objets à liaison tardive, y compris des types anonymes, etc.
Exemple de base
Remarque: n'utilisez Microsofts JavaScriptSerializer que si les performances ne sont pas importantes pour vous, car j'ai dû les laisser en dehors de mes repères car il est jusqu'à 40x-100x plus lent que les autres sérialiseurs JSON.
la source
Veuillez noter que cela date de 2008. Aujourd'hui, je dirais que le sérialiseur devrait être intégré et que vous pouvez probablement utiliser les attributs swagger + pour informer les consommateurs sur votre point de terminaison et renvoyer des données.
Je dirais que vous ne devriez pas sérialiser un type anonyme . Je connais la tentation ici; vous voulez générer rapidement des types jetables qui vont juste être utilisés dans un environnement de type lâche aka Javascript dans le navigateur. Pourtant, je créerais un type réel et le décorerais comme sérialisable. Ensuite, vous pouvez taper fortement vos méthodes Web. Bien que cela ne compte pas un iota pour Javascript, cela ajoute une auto-documentation à la méthode. Tout programmeur raisonnablement expérimenté pourra regarder la signature de la fonction et dire: "Oh, c'est du type Foo! Je sais à quoi cela devrait ressembler en JSON."
Cela dit, vous pouvez essayer JSON.Net pour effectuer la sérialisation. Je n'ai aucune idée si cela fonctionnera
la source
Le moyen le plus rapide que j'ai trouvé était le suivant:
Espace de noms: System.Web.Script.Serialization.JavaScriptSerializer
la source
Vous pouvez utiliser Newtonsoft.Json.
la source
En supposant que vous l'utilisez pour un service Web, vous pouvez simplement appliquer l'attribut suivant à la classe:
Ensuite, l'attribut suivant à chaque méthode qui doit renvoyer Json:
Et définissez le type de retour des méthodes sur "objet"
la source
la source