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

 更新时间:2023年05月19日 08:37:16   作者:微小冷  
.net core提供了Json处理模块,在命名空间System.Text.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<T>,可将其转化为C#对象

string js = File.ReadAllText("test.json");
var w = JsonSerializer.Deserialize<WeatherInfo>(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<T>,并重写其中用于转换的内容,相对来说比较麻烦,所以推荐使用经典的NewtonSoft.Json,需要在NuGet中搜索添加。

在Newtonsoft.Json中,函数JsonConvert.DeserializeObject完全具备System.Text.Json中JsonSerializer.Deserialize的所有功能,同时开可以将泛型变量设为字典

using Newtonsoft.Json;

var dct = JsonConvert.DeserializeObject<Dictionary<string, string>>(js);
foreach (var item in dct)
    Console.WriteLine($"{item.Key}:{item.Value}");

结果为

Date:2023-05-11T15:54:46.2907782+08:00
Temperature:25
Summary:Hot

相应地,将字典编写为json格式字符串,可通过JsonConvert.SerializeObject来实现

var dct = new Dictionary<string, string>()
{
    {"Date", DateTime.Now.ToString("f") },
    {"Temp", "25" },
    {"Summary", "Hot" }
};

string js = JsonConvert.SerializeObject(dct);
Console.WriteLine(js);

效果为

{"Date":"2023年5月11日 16:44","Temp":"25","Summary":"Hot"}

到此这篇关于C#操作JSON(序列化与反序列化)的方法详解的文章就介绍到这了,更多相关C#操作JSON内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#判断当前程序是否通过管理员运行的方法

    C#判断当前程序是否通过管理员运行的方法

    这篇文章主要介绍了C#判断当前程序是否通过管理员运行的方法,可通过非常简单的系统函数调用实现对当前程序是否通过管理员运行进行判定,是非常实用的技巧,需要的朋友可以参考下
    2014-11-11
  • vs2019安装和使用详细图文教程

    vs2019安装和使用详细图文教程

    这篇文章主要介绍了vs2019安装和使用详细图文教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • WPF实现自绘仪表盘Gauge

    WPF实现自绘仪表盘Gauge

    这篇文章主要为大家详细介绍了如何使用WPF实现自绘仪表盘Gauge效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-12-12
  • C#如何获取当前路径的父路径

    C#如何获取当前路径的父路径

    这篇文章主要介绍了C#如何获取当前路径的父路径问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • 基于C#中XmlReader读取Xml的深入分析

    基于C#中XmlReader读取Xml的深入分析

    本篇文章是对C#中XmlReader读取Xml进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C#管道式编程的介绍与实现

    C#管道式编程的介绍与实现

    这篇文章主要给大家介绍了关于C#管道式编程的介绍与实现方法,文中通过示例代码介绍的非常详细,对大家学习或者使用C#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • C#中的yield关键字的使用方法介绍

    C#中的yield关键字的使用方法介绍

    yield这个关键字是和迭代器挂钩的,而且是与return一起以yield return的形式合用的,用来返回迭代器中的条目。
    2013-04-04
  • C#通过反射创建自定义泛型

    C#通过反射创建自定义泛型

    这篇文章主要介绍了C#通过反射创建自定义泛型的方法,需要的朋友可以参考下
    2014-08-08
  • c#的sortedlist使用方法

    c#的sortedlist使用方法

    这篇文章主要介绍了c#的sortedlist使用方法,需要的朋友可以参考下
    2014-05-05
  • c#高效的线程安全队列ConcurrentQueue<T>的实现

    c#高效的线程安全队列ConcurrentQueue<T>的实现

    这篇文章主要介绍了c#高效的线程安全队列ConcurrentQueue<T>的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11

最新评论