Kaip paversti C# objektą į JSON eilutę naudojant .NET?

Turiu tokių pamokų:

class MyDate
{
    int year, month, day;
}

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

Ir norėčiau paversti Lad objektą į JSON eilutę taip:

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

(be formatavimo). Radau šią nuorodą, bet joje naudojama vardų erdvė, kurios nėra .NET 4. Taip pat girdėjau apie JSON.NET, bet šiuo metu jų svetainė, atrodo, neveikia, o aš nenoriu naudoti išorinių DLL failų. Ar yra kitų galimybių, be to, kad rankiniu būdu sukurti JSON eilutės rašytuvą?

Kadangi mes visi mėgstame vieną eilutę

... šis priklauso nuo "Newtonsoft NuGet" paketo, kuris yra populiarus ir geresnis už numatytąjį serializatorių.

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

Dokumentacija: Serializavimas ir deserializavimas JSON]1

Komentarai (9)
Sprendimas

Galite naudoti JavaScriptSerializer klasę (pridėkite nuorodą į System.Web.Extensions):

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

Išsamus pavyzdys:

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);
    }
}
Komentarai (8)

Naudokite DataContractJsonSerializer klasę: MSDN1, MSDN2.

Mano pavyzdys: ČIA.

Jis taip pat gali saugiai deserializuoti objektus iš JSON eilutės, kitaip nei JavaScriptSerializer. Tačiau man asmeniškai vis dar labiau patinka Json.NET.

Komentarai (8)