使用 Newtonsoft.Json (Json.NET)

Newtonsoft.Json 是 C# 中最流行的 JSON 解析库,功能强大且易于使用。安装 NuGet 包 Newtonsoft.Json 后即可开始使用。

反序列化 JSON 到对象:

string json = "{\"name\":\"John\", \"age\":30}";
Person person = JsonConvert.DeserializeObject<Person>(json);

public class Person {
    public string Name { get; set; }
    public int Age { get; set; }
}

序列化对象到 JSON:

Person person = new Person { Name = "John", Age = 30 };
string json = JsonConvert.SerializeObject(person);

使用 System.Text.Json

.NET Core 3.0 及以上版本内置了 System.Text.Json 库,性能更高但功能略少于 Newtonsoft.Json。

反序列化 JSON 到对象:

string json = "{\"name\":\"John\", \"age\":30}";
Person person = JsonSerializer.Deserialize<Person>(json);

序列化对象到 JSON:

Person person = new Person { Name = "John", Age = 30 };
string json = JsonSerializer.Serialize(person);

处理动态 JSON

对于结构不固定的 JSON,可以使用动态类型:

string json = "{\"name\":\"John\", \"age\":30}";
dynamic data = JsonConvert.DeserializeObject(json);
Console.WriteLine(data.name); // 输出 "John"

处理嵌套 JSON

对于嵌套结构的 JSON,需要定义对应的嵌套类:

string json = "{\"person\":{\"name\":\"John\", \"age\":30}}";
var data = JsonConvert.DeserializeObject<RootObject>(json);

public class RootObject {
    public Person Person { get; set; }
}

处理 JSON 数组

解析 JSON 数组需要使用数组或列表类型:

string json = "[{\"name\":\"John\"}, {\"name\":\"Jane\"}]";
List<Person> people = JsonConvert.DeserializeObject<List<Person>>(json);

自定义序列化设置

可以配置各种序列化选项:

var settings = new JsonSerializerSettings {
    Formatting = Formatting.Indented,
    NullValueHandling = NullValueHandling.Ignore
};
string json = JsonConvert.SerializeObject(person, settings);

错误处理

建议始终添加错误处理:

try {
    var data = JsonConvert.DeserializeObject<Person>(json);
} catch (JsonException ex) {
    Console.WriteLine($"JSON 解析错误: {ex.Message}");
}

性能优化

对于大型 JSON 处理,可以使用流式 API:

using var stream = new MemoryStream(Encoding.UTF8.GetBytes(json));
var data = await JsonSerializer.DeserializeAsync<Person>(stream);

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐