协慌网

登录 贡献 社区

如何在. NET 中将 C#对象转换为 JSON 字符串?

我有这样的课程:

class MyDate
{
    int year, month, day;
}

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

我想把一个Lad对象变成一个像这样的 JSON 字符串:

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

(没有格式化)。我找到了这个链接 ,但它使用的是一个不在. NET 4 中的命名空间。我也听说过JSON.NET ,但是他们的网站目前似乎已经关闭了,我并不热衷于使用外部 DLL 文件。除了手动创建 JSON 字符串编写器之外还有其他选项吗?

答案

因为我们都喜欢一个衬里

... 这个依赖于 Newtonsoft NuGet 包,它比默认的序列化器更受欢迎。

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

文档: 序列化和反序列化 JSON

您可以使用JavaScriptSerializer类(添加对System.Web.Extensions引用):

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

一个完整的例子:

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

使用Json.Net库,您可以从 Nuget Packet Manager 下载它。

序列化为 Json 字符串:

var obj = new Lad
        {
            firstName = "Markoff",
            lastName = "Chaney",
            dateOfBirth = new MyDate
            {
                year = 1901,
                month = 4,
                day = 30
            }
        };

var jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(obj);

反序列化为对象:

var obj = Newtonsoft.Json.JsonConvert.DeserializeObject<Lad>(jsonString );