C#解析JSON数据全攻略
·
使用 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);
更多推荐

所有评论(0)