CSharp中的常用的JSON库-Newtonsoft.Json

前言

在C#中,我们通常使用Newtonsoft.Json库(也称为Json.NET)来处理JSON数据。这个库提供了丰富的功能来序列化和反序列化JSON数据。

官网:

https://www.newtonsoft.com/json

NuGet安装:

1
Install-Package Newtonsoft.Json -Version 13.0.3

工具类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
using System;
using System.Collections.Generic;
using System.IO;
using Newtonsoft.Json;

public class ZJsonHelper
{
/// <summary>
/// 类对像转换成json格式
/// </summary>
/// <returns>
/// </returns>
public static string ToJson(object? t)
{
if (t != null)
{
return JsonConvert.SerializeObject(
t,
Formatting.None,
new JsonSerializerSettings { NullValueHandling = NullValueHandling.Include }
);
}

return "";
}

/// <summary>
/// 类对像转换成json格式
/// </summary>
/// <param name="t">
/// </param>
/// <param name="hasNullIgnore">
/// 是否忽略NULL值
/// </param>
/// <returns>
/// </returns>
public static string ToJson(object t, bool hasNullIgnore)
{
try
{
if (hasNullIgnore)
{
return JsonConvert.SerializeObject(
t,
Formatting.Indented,
new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }
);
}

return ToJson(t);
}
catch (Exception)
{
// ignored
}

return "";
}

/// <summary>
/// JSON字符串转对象
/// </summary>
/// <typeparam name="T">
/// </typeparam>
/// <param name="strJson">
/// </param>
/// <returns>
/// </returns>
public static T? JsonToObj<T>(string strJson) where T : class
{
//Console.WriteLine("strJson:" + strJson);
try
{
if (!string.IsNullOrEmpty(strJson))
{
return JsonConvert.DeserializeObject<T>(strJson);
}
}
catch (Exception)
{
// ignored
}

return null;
}

/// <summary>
/// JSON字符串转列表
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="respstr"></param>
/// <returns></returns>
public static List<T> JsonToList<T>(string respstr)
{
try
{
JsonSerializer serializer = new JsonSerializer();
StringReader sr = new StringReader(respstr);
object? o = serializer.Deserialize(new JsonTextReader(sr), typeof(List<T>));
if (o is List<T> list)
{
return list;
}
}
catch (Exception)
{
// ignored
}

return new List<T>();
}

/// <summary>
/// 对象转对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <returns></returns>
public static T? ObjToObj<T>(T? obj) where T : class
{
try
{
if (obj != null)
{
T? jsonToObj = JsonToObj<T>(ToJson(obj));
return jsonToObj;
}
}
catch (Exception)
{
// ignored
}

return default;
}

/// <summary>
/// 列表转为新的列表
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="list"></param>
/// <returns></returns>
public static List<T> ListToList<T>(List<T>? list)
{
try
{
if (list != null)
{
return JsonToList<T>(ToJson(list));
}
}
catch (Exception)
{
// ignored
}

return new List<T>();
}
}

忽略NULL值属性

1
2
3
4
5
6
7
//过滤掉NULL值的属性
JsonSerializerSettings jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore };
return JsonConvert.SerializeObject(
obj,
Formatting.Indented,
jsonSetting
);