c#Nettonsoft.net库常用的方法json序列化反序列化

Newtonsoft.Json 是一个流行的 JSON 操作库,用于在 .NET 应用程序中序列化、反序列化和操作 JSON 数据。下面是 Newtonsoft.Json 常用的一些方法:

序列化对象为 JSON 字符串:

cs 复制代码
string json = JsonConvert.SerializeObject(obj);
cs 复制代码
var obj = new { Name = "John", Age = 30 };
string json = JsonConvert.SerializeObject(obj);
// 输出结果:{"Name":"John","Age":30}

反序列化JSON字符串为对象:

cs 复制代码
T obj = JsonConvert.DeserializeObject<T>(json);
cs 复制代码
string json = "{\"Name\":\"John\",\"Age\":30}";
var obj = JsonConvert.DeserializeObject<Person>(json);
// 其中 Person 类定义为:class Person { public string Name { get; set; } public int Age { get; set; } }

将JSON对象转换成键值对集合:

cs 复制代码
JObject jObject = JObject.Parse(json);
Dictionary<string, string> dictionary = jObject.ToObject<Dictionary<string, string>>();
cs 复制代码
var obj = new { Name = "John", Age = 30 };
string json = JsonConvert.SerializeObject(obj);
// 输出结果:{"Name":"John","Age":30}

忽略对象中的null值属性:

cs 复制代码
string json = JsonConvert.SerializeObject(obj, new JsonSerializerSettings
{
    NullValueHandling = NullValueHandling.Ignore
});
cs 复制代码
var obj = new { Name = "John", Age = (string)null };
string json = JsonConvert.SerializeObject(obj, new JsonSerializerSettings
{
    NullValueHandling = NullValueHandling.Ignore
});
// 输出结果:{"Name":"John"}

将JSON字符串转换成易读的形式:

cs 复制代码
string formattedJson = JValue.Parse(json).ToString(Formatting.Indented);
cs 复制代码
string json = "{\"Name\":\"John\",\"Age\":30}";
string formattedJson = JValue.Parse(json).ToString(Formatting.Indented);
// 输出结果:
// {
//   "Name": "John",
//   "Age": 30
// }

将json对象转换成动态对象:

cs 复制代码
string json = "{\"Name\":\"John\",\"Age\":30}";
dynamic obj = JsonConvert.DeserializeObject(json);
Console.WriteLine(obj.Name); // 输出:John
Console.WriteLine(obj.Age); // 输出:30

类中有的属性但是在JSON字符串中没有对应值需要注意的事

情况一:JSON 中包含 "Age" 值

cs 复制代码
class Person
{
    public string Name { get; set; }
    public int Age { get; set; } // 不使用可空类型
}

string json1 = "{\"Name\":\"John\",\"Age\":30}";
Person obj1 = JsonConvert.DeserializeObject<Person>(json1);
Console.WriteLine(obj1.Name); // 输出:John
Console.WriteLine(obj1.Age); // 输出:30

情况二:JSON 中没有 "Age" 值

cs 复制代码
class Person
{
    public string Name { get; set; }
    public int Age { get; set; } // 不使用可空类型
}

string json2 = "{\"Name\":\"John\"}";
Person obj2 = JsonConvert.DeserializeObject<Person>(json2);
Console.WriteLine(obj2.Name); // 输出:John
Console.WriteLine(obj2.Age); // 输出:0(默认值)

在情况一中,当 JSON 包含 "Age" 值时,可以直接将其赋值给对象的 Age 属性。

而在情况二中,由于 JSON 中没有 "Age" 值,反序列化后的对象会使用类型的默认值,对于 int 类型来说,默认值是 0。这可能会导致不合理的结果。

如果希望在情况二中避免不合理的默认值,可以使用可空类型来声明 Age 属性,并将其设置为 null。这样,即使 JSON 中没有 "Age" 值,反序列化后的对象的 Age 属性会是 null

情况三:JSON 中缺少 "Age" 键

cs 复制代码
class Person
{
    public string Name { get; set; }
    public int? Age { get; set; } // 使用可空类型
}

string json3 = "{\"Name\":\"John\"}";
Person obj3 = JsonConvert.DeserializeObject<Person>(json3);
Console.WriteLine(obj3.Name); // 输出:John
Console.WriteLine(obj3.Age); // 输出:null

在情况三中,由于 JSON 中缺少 "Age" 键,反序列化后的对象会使用可空类型的默认值 null,因此 Age 属性为 null。

相关推荐
赵庆明老师2 天前
Vben精讲:21-详解web-antd:tsconfig.json
前端·json·vim
红叶舞3 天前
成数据绑定对象,在应用程序中处理完数据后,将更新的数据序列化为JSON传回远端服务器,很多移动应用使用了这种模式处理服务器端的数据。 ...
运维·服务器·json
name好难取诶4 天前
解析请求体内容(如 JSON、表单数据、XML 等) 将原始数据转换为 Python 数据结构 使转换后的数据可在 request. ...
xml·python·json
gcw10244 天前
JSONMe 简觅JSON 工具
json·json格式化·json可视化·json美化·json校验·好用的json工具·json编辑
北北牌屈四巴格!4 天前
whistle自定义修改接口返回值内容
前端·json
SQDN5 天前
Chatbox 1.22.1 获取不到模型?先验 /models,再对齐精确 model ID
人工智能·测试工具·机器学习·chatgpt·json
SunnyDays10115 天前
Python 将 Excel(XLS/XLSX)转换为 JSON:导出工作簿、工作表、单元格区域与自定义 JSON 结构
python·json·excel·excel 转 json·导出 excel 到 json·xlsx 转 json·xls 转 json
刘小八5 天前
Spring AI 结构化输出:稳定生成可校验的业务 JSON
人工智能·spring·json
CodexDave6 天前
Python 自动化接单实战(一):把 CSV 需求做成配置驱动解析器
java·python·自动化·json·数据清洗·python自动化·csv处理
今夜有雨.7 天前
C++JSON 解析器
c++·笔记·后端·学习·json