Comment transformer un objet C# en une chaîne JSON en .NET ?

J'ai des cours comme ceux-là :

class MyDate
{
    int year, month, day;
}

class Lad
{
    string firstName;
    string lastName;
    MyDate dateOfBirth;
}

Et je voudrais transformer un objet Lad en une chaîne JSON comme celle-ci :

{
    "firstName":"Markoff",
    "lastName":"Chaney",
    "dateOfBirth":
    {
        "year":"1901",
        "month":"4",
        "day":"30"
    }
}

(sans la mise en forme). J'ai trouvé [ce lien][1], mais il utilise un espace de noms qui n'est pas dans .NET 4. J'ai également entendu parler de [JSON.NET][2], mais leur site semble être en panne en ce moment, et je n'ai pas envie d'utiliser des fichiers DLL externes. Existe-t-il d'autres options que la création manuelle d'un rédacteur de chaînes JSON ?

[1] : http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer(v=vs.110).aspx [2] : http://james.newtonking.com/projects/json-net.aspx

Puisque nous aimons tous les one liners

... celui-ci dépend du paquet NuGet de Newtonsoft, qui est populaire et meilleur que le sérialiseur par défaut.

Newtonsoft.Json.JsonConvert.SerializeObject(new {foo = "bar"})

Documentation : [Sérialisation et désérialisation de JSON][1]

[1] : http://www.newtonsoft.com/json/help/html/SerializingJSON.htm

Commentaires (9)
Solution

Vous pouvez utiliser la classe [JavaScriptSerializer][1] (ajoutez la référence à System.Web.Extensions) :

using System.Web.Script.Serialization;
var json = new JavaScriptSerializer().Serialize(obj);

Un exemple complet :

using System;
using System.Web.Script.Serialization;

public class MyDate
{
    public int year;
    public int month;
    public int day;
}

public class Lad
{
    public string firstName;
    public string lastName;
    public MyDate dateOfBirth;
}

class Program
{
    static void Main()
    {
        var obj = new Lad
        {
            firstName = "Markoff",
            lastName = "Chaney",
            dateOfBirth = new MyDate
            {
                year = 1901,
                month = 4,
                day = 30
            }
        };
        var json = new JavaScriptSerializer().Serialize(obj);
        Console.WriteLine(json);
    }
}

[1] : https://docs.microsoft.com/en-us/dotnet/api/system.web.script.serialization.javascriptserializer

Commentaires (8)

Utilisez la classe DataContractJsonSerializer : MSDN1, MSDN2.

Mon exemple : ICI.

Il peut aussi désérialiser en toute sécurité des objets à partir d'une chaîne JSON, contrairement à JavaScriptSerializer. Mais personnellement, je préfère encore Json.NET.

Commentaires (8)