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# 字段和方法设计建议,帮助大家更好的理解和使用c#编程语言,感兴趣的朋友可以了解下
    2020-11-11
  • C# 10分钟完成百度人脸识别(入门篇)

    C# 10分钟完成百度人脸识别(入门篇)

    这篇文章主要介绍了C# 10分钟完成百度人脸识别(入门篇),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-02-02
  • C#中Class的实例化过程详解

    C#中Class的实例化过程详解

    文章详细阐述了C#中类的成员,包括静态字段、静态构造函数、实例字段等的初始化顺序,在无继承情况下,实例化分为声明时初始化和构造函数中初始化两种,分别有明确的执行顺序,需要的朋友可以参考下
    2024-09-09
  • C#自定义序列化ISerializable的实现方法

    C#自定义序列化ISerializable的实现方法

    这篇文章主要介绍了C#自定义序列化ISerializable的实现方法,涉及C#序列化的操作技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • C#使用Spire.PDF for .NET轻松提取PDF文件中的文字内容

    C#使用Spire.PDF for .NET轻松提取PDF文件中的文字内容

    从 PDF 中提取文本内容却常常令人头疼,本文将介绍如何使用 Spire.PDF for .NET 这一强大的组件,通过 C# 代码轻松实现 PDF 文本提取,感兴趣的可以了解下
    2026-03-03
  • C#无损高质量压缩图片实现代码

    C#无损高质量压缩图片实现代码

    这篇文章主要为大家详细介绍了C#无损高质量压缩图片的实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • C#生成随机数功能示例

    C#生成随机数功能示例

    这篇文章主要介绍了C#生成随机数功能,涉及C#数学运算与字符串操作相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2017-01-01
  • Unity实现弧形移动效果

    Unity实现弧形移动效果

    这篇文章主要为大家详细介绍了Unity实现弧形移动效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • C#自动判断Excel版本使用不同的连接字符串

    C#自动判断Excel版本使用不同的连接字符串

    这篇文章主要介绍了C#自动判断Excel版本使用不同的连接字符串,本文重点在不同版本的连接字符串介绍,需要的朋友可以参考下
    2015-06-06
  • C#编写DES加密、解密类

    C#编写DES加密、解密类

    本文给大家汇总了一下使用C#实现的DES加密、解密类的代码,十分的简单实用,有需要的小伙伴可以参考下
    2015-05-05

最新评论