服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - c# Newtonsoft.Json 常用方法总结

c# Newtonsoft.Json 常用方法总结

2022-11-01 15:00丹枫无迹 C#

这篇文章主要介绍了c# Newtonsoft.Json 常用方法的相关资料,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下

1 实体类的 Json 序列化和反序列化

我们以如下的 Person 类举例,其中包含了常用的数据类型:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Person
{
 public int ID { get; set; }
 
 public string Name { get; set; }
 
 public DateTime Birthday { get; set; }
 
 public bool IsVIP { get; set; }
 
 public float Account { get; set; }
 
 public string[] Favorites { get; set; }
 
 public string Remark { get; set; }
}

创建一个 Person 实例:

?
1
2
3
4
5
6
7
8
9
Person person = new Person
{
 ID = 1,
 Name = "张三",
 Birthday = DateTime.Parse("2000-01-02"),
 IsVIP = true,
 Account = 12.34f,
 Favorites = new string[] { "吃饭", "睡觉" }
};

1.1 Json 序列化

返回不缩进的 Json 字符串

?
1
2
3
JsonConvert.SerializeObject(person);
 
{"ID":1,"Name":"张三","Birthday":"2000-01-02T00:00:00","IsVIP":true,"Account":12.34,"Favorites":["吃饭","睡觉"],"Remark":null}

返回缩进的 Json 字符串

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
JsonConvert.SerializeObject(person, Formatting.Indented);
 
{
 "ID": 1,
 "Name": "张三",
 "Birthday": "2000-01-02T00:00:00",
 "IsVIP": true,
 "Account": 12.34,
 "Favorites": [
  "吃饭",
  "睡觉"
 ],
 "Remark": null
}

1.2 将不缩进的 JSON 字符串转成缩进形式

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
private string JsonIndentation(string str)
{
 //string str = JsonConvert.SerializeObject(entity);
 JsonSerializer serializer = new JsonSerializer();
 TextReader tr = new StringReader(str);
 JsonTextReader jtr = new JsonTextReader(tr);
 object obj = serializer.Deserialize(jtr);
 if (obj != null)
 {
  StringWriter textWriter = new StringWriter();
  JsonTextWriter jsonWriter = new JsonTextWriter(textWriter)
  {
   Formatting = Formatting.Indented,
   Indentation = 4,
   IndentChar = ' '
  };
  serializer.Serialize(jsonWriter, obj);
  return textWriter.ToString();
 }
 else
 {
  return str;
 }
}

或者:

?
1
2
3
4
5
private string JsonIndentation(string json)
{
 JObject obj = JObject.Parse(json);
 return obj.ToString();
}

1.3 其他设置

?
1
2
3
4
5
6
7
8
9
JsonSerializerSettings settings = new JsonSerializerSettings();
// 设置日期格式
settings.DateFormatString = "yyyy-MM-dd";
// 忽略空值
settings.NullValueHandling = NullValueHandling.Ignore;
// 缩进
settings.Formatting = Formatting.Indented;
 
JsonConvert.SerializeObject(person, settings);

返回:

?
1
2
3
4
5
6
7
8
9
10
11
{
 "ID": 1,
 "Name": "张三",
 "Birthday": "2000-01-02",
 "IsVIP": true,
 "Account": 12.34,
 "Favorites": [
 "吃饭",
 "睡觉"
 ]
}

1.4 Json 反序列化

?
1
JsonConvert.DeserializeObject<Person>(json);

2 JObject 使用

2.1 创建对象

?
1
2
3
4
5
6
7
8
9
10
11
12
JObject obj = new JObject();
obj.Add("ID", 1);
obj.Add("Name", "张三");
obj.Add("Birthday", DateTime.Parse("2000-01-02"));
obj.Add("IsVIP", true);
obj.Add("Account", 12.34f);
// 创建数组
JArray array = new JArray();
array.Add(new JValue("吃饭"));
array.Add(new JValue("睡觉"));
obj.Add("Favorites", array);
obj.Add("Remark", null);

2.2 JObject 中添加数组

上例中的代码可以简化为:

?
1
JArray array = new JArray("吃饭", "睡觉");

2.3 从 Json 字符串创建 JObject

?
1
2
3
string json = "{\"ID\":1,\"Name\":\"张三\",\"Birthday\":\"2000-01-02T00:00:00\",\"IsVIP\":true,\"Account\":12.34,\"Favorites\":[\"吃饭\",\"睡觉\"],\"Remark\":null}";
 
JObject obj = JObject.Parse(json);

2.4 从 Entity 创建 JObject

?
1
JObject obj = JObject.FromObject(person);

用匿名对象创建 JObject

?
1
2
3
4
5
6
7
JObject obj = JObject.FromObject(new { name = "jack", age = 18 });
 
//显示
{
 "name": "jack",
 "age": 18
}

用初始化器

?
1
2
3
4
5
JObject obj = new JObject()
{
 { "name", "jack" },
 { "age", 18 }
};

#21b611ff951f9ef061490f6f234ef4bc#

2.5 获取值

?
1
2
3
int id;
if (obj["ID"] != null)
 id = obj["ID"].Value<int>();

2.6 获取数组

Newtonsoft.Json.Linq 不支持直接获取数组,但是可以获取 List,然后再转化为数组。

?
1
2
3
string[] favorites;
if (obj["Favorites"] != null)
 favorites = obj["Favorites"].Value<List<string>>().ToArray();

以上就是c# Newtonsoft.Json 常用方法总结的详细内容,更多关于c# Newtonsoft.Json的资料请关注服务器之家其它相关文章!

原文链接:https://www.cnblogs.com/gl1573/p/11660202.html

延伸 · 阅读

精彩推荐
  • C#C#怎么给PDF添加背景图片

    C#怎么给PDF添加背景图片

    无论是办公还是日常生活中都经常会用到,很多时候,PDF文件的背景色都是白色,看多了难免觉得累,更换PDF的背景不仅可以让眼睛看起来更舒服,还可以...

    Yesi9712021-11-11
  • C#C#支付宝新版支付请求接口调用

    C#支付宝新版支付请求接口调用

    这篇文章主要为大家详细介绍了C#支付宝新版支付请求接口调用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    lwpoor1234592022-02-27
  • C#C#使用ADO.Net部件来访问Access数据库的方法

    C#使用ADO.Net部件来访问Access数据库的方法

    数据库的访问是所有编程语言中最重要的部分,C#提供了ADO.Net部件用于对数据库进行访问。本文从最简单易用的微软Access数据库入手讨论在C#中对数据库的...

    C#教程网8812021-10-25
  • C#C#导入导出Excel数据的两种方法

    C#导入导出Excel数据的两种方法

    这篇文章主要为大家详细介绍了C#导入导出Excel数据的两种方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    路博林9962021-12-29
  • C#UGUI绘制多点连续的平滑曲线

    UGUI绘制多点连续的平滑曲线

    这篇文章主要为大家详细介绍了UGUI绘制多点连续的平滑曲线,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    叫我上上4472022-03-07
  • C#c# 死锁和活锁的发生及避免

    c# 死锁和活锁的发生及避免

    多线程编程时,如果涉及同时读写共享数据,就要格外小心。如果共享数据是独占资源,则要对共享数据的读写进行排它访问,最简单的方式就是加锁。锁...

    精致码农 • 王亮8812022-10-14
  • C#C#实现斐波那契数列的几种方法整理

    C#实现斐波那契数列的几种方法整理

    这篇文章主要介绍了C#实现斐波那契数列的几种方法整理,主要介绍了递归,循环,公式和矩阵法等,小编觉得挺不错的,现在分享给大家,也给大家做个...

    快乐泥巴5222022-03-01
  • C#C# GUID ToString的使用总结

    C# GUID ToString的使用总结

    这篇文章主要介绍了C# GUID ToString的使用总结,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...

    lindexi9912022-11-01