C#操作JSON(序列化与反序列化)的方法详解

c#操作json(序列化与反序列化)的方法详解

.net core提供了json处理模块,在命名空间system.text.json中,下面通过顶级语句,对c#的json功能进行讲解。

 

序列化

将c#对象编辑为json格式字符串的过程,即为json序列化,在c#中,通过jsonserializer.serialize来实现

using system.text.json;

public class weatherinfo
{
  public datetimeoffset date { get; set; }
  public int temperature { get; set; }
  public string? summary { get; set; }
}

var winfo = new weatherinfo
{
  date = datetime.now,
  temperature = 25,
  summary = "hot"
};

string js = jsonserializer.serialize(winfo);
file.writealltext("test.json", js);     //将其输出为文件
console.writeline(js);

上例中,winfo是weatherinfo的对象,通过json序列化,成功将其转化为字符串,输出结果如下

{"date":"2023-05-11t15:52:49.4942993+08:00","temperature":25,"summary":"hot"}

 

反序列化

将json字符串读取为c#对象的过程,即为反序列化,以刚刚创建的test.json为例,通过泛型函数deserialize,可将其转化为c#对象

string js = file.readalltext("test.json");
var w = jsonserializer.deserialize(js);

console.writeline($"{w.date}\r\n{w.temperature}\r\n{w.summary}");

测试结果为

2023/5/11 15:54:46 +08:00
25
hot

 

与字典互转

考虑到并非所有json数据都能找到c#中对应的类,为了更加灵活地操作json数据,在实际使用中,可以建立json和字典的转换方法。如果仍然使用system.text.json中的方法,则需要继承抽象类jsonconverter,并重写其中用于转换的内容,相对来说比较麻烦,所以推荐使用经典的newtonsoft.json,需要在nuget中搜索添加。

在newtonsoft.json中,函数jsonconvert.deserializeobject完全具备system.text.json中jsonserializer.deserialize的所有功能,同时开可以将泛型变量设为字典

using newtonsoft.json;

var dct = jsonconvert.deserializeobject                
相关文章