287 votes

Comment créer une chaîne JSON en C#

Je viens d'utiliser le XmlWriter pour créer du XML à renvoyer dans une réponse HTTP. Comment créer une chaîne JSON ? Je suppose qu'il suffit d'utiliser un générateur de chaînes pour construire la chaîne JSON et formater la réponse au format JSON ?

412voto

Orr Points 1053

Utilisation de Newtonsoft.Json rend les choses vraiment plus faciles :

Product product = new Product();
product.Name = "Apple";
product.Expiry = new DateTime(2008, 12, 28);
product.Price = 3.99M;
product.Sizes = new string[] { "Small", "Medium", "Large" };

string json = JsonConvert.SerializeObject(product);

Documentation : Sérialisation et désérialisation de JSON

8 votes

MS fournit désormais NewtonSoft en standard dans le modèle de projet VS MVC4.

63 votes

Vous pouvez également sérialiser des objets anonymes si nécessaire : string json = JsonConvert.SerializeObject(new { "PropertyA" = obj.PropertyA }); .

11 votes

@MattBeckman J'obtiens "Invalid anonymous type member declarator. Les membres de type anonyme doivent être déclarés avec une affectation de membre, un nom simple ou un accès de membre. Ne devrait pas "PropertyA" être PropertyA ?

256voto

CMS Points 315406

Vous pourriez utiliser le Classe JavaScriptSerializer , vérifier cet article pour construire une méthode d'extension utile.

Code de l'article :

namespace ExtensionMethods
{
    public static class JSONHelper
    {
        public static string ToJSON(this object obj)
        {
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            return serializer.Serialize(obj);
        }

        public static string ToJSON(this object obj, int recursionDepth)
        {
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            serializer.RecursionLimit = recursionDepth;
            return serializer.Serialize(obj);
        }
    }
}

Utilisation :

using ExtensionMethods;

...

List<Person> people = new List<Person>{
                   new Person{ID = 1, FirstName = "Scott", LastName = "Gurthie"},
                   new Person{ID = 2, FirstName = "Bill", LastName = "Gates"}
                   };

string jsonString = people.ToJSON();

0 votes

Oui, j'essaie juste de comprendre comment former le texte JSON d'abord. Merci

0 votes

et si vous n'utilisez pas .NET 3.5 ! da** it

2 votes

JavaScriptSerializer fait partie de ASP.NET Ajax 1.0 si vous souhaitez l'utiliser à partir de .NET 2.0.

18voto

Hugoware Points 13645

Cette bibliothèque est très bonne pour JSON à partir de C#.

http://james.newtonking.com/pages/json-net.aspx

1 votes

Permettez-moi de vous demander quels sont les avantages de l'utilisation de ce cadre par rapport à la méthode d'aide mentionnée ci-dessus par la CMS ?

1 votes

vous permet d'avoir une granularité plus fine sur le json, par exemple vous pouvez spécifier d'inclure des nuls ou non etc

13voto

Joe Chung Points 6263

Cet extrait de code utilise le DataContractJsonSerializer de System.Runtime.Serialization.Json dans .NET 3.5.

 public static string ToJson<T>(/* this */ T value, Encoding encoding)
{
    var serializer = new DataContractJsonSerializer(typeof(T));

    using (var stream = new MemoryStream())
    {
        using (var writer = JsonReaderWriterFactory.CreateJsonWriter(stream, encoding))
        {
            serializer.WriteObject(writer, value);
        }

        return encoding.GetString(stream.ToArray());
    }
}
 

3 votes

Donc ... décommentez la référence 'this' pour que cet extrait fonctionne. Si vous n'avez jamais travaillé avec des méthodes d'extension auparavant, cela peut ne pas être évident.

6voto

Josh Points 552

Jetez un coup d'œil à http://www.codeplex.com/json/ pour le projet json-net.aspx. Pourquoi réinventer la roue ?

3 votes

Il se peut que je ne veuille pas dépendre d'un plugin open source tiers juste pour créer du JSON. Je préférerais créer moi-même la méthode string/helper.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X