广告
返回顶部
首页 > 资讯 > 精选 >C#中怎么实现JSON功能及对象的序列化和反序列化
  • 154
分享到

C#中怎么实现JSON功能及对象的序列化和反序列化

2023-06-03 09:06:08 154人浏览 薄情痞子
摘要

本篇内容主要讲解“C#中怎么实现JSON功能及对象的序列化和反序列化”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#中怎么实现jsON功能及对象的序列化和反序列化”吧!Newtonsoft.J

本篇内容主要讲解“C#中怎么实现JSON功能及对象的序列化和反序列化”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#中怎么实现jsON功能及对象的序列化和反序列化”吧!

Newtonsoft.Json程序包的引用

c#中使用json功能,需要Newtonsoft.Json程序包,可以通过NuGet程序包管理器搜索Newtonsoft.Json来安装,也可以在NuGet程序包管理器控制台下使用以下命令来安装:

install-package Newtonsoft.Json

然后引用NewTonSoft.Json命名空间。之后就可以将建立的对象转换为JSON字符串了。

将对象序列化为JSON字符串

如下创建一个类

public class Student{    public int Id { get; set; }    public string Name { get; set; }    public string Sex { get; set; }    public string Description { get; set; }}

生成对象并序列化为JSON字符串

List<Student> students = new List<Student>();students.Add(new Student { Id = 1, Name = "张三", Sex = "男", Description = "班长" });students.Add(new Student { Id = 2, Name = "李四", Sex = "女", Description = "小组长" });students.Add(new Student { Id = 3, Name = "王五", Sex = "男", Description = "宣传委员" });string studentsJson = JsonConvert.SerializeObject(students);Console.WriteLine(studentsJson);

输出结果:
[{“Id”:1,”Name”:”张三”,”Sex”:”男”,”Description”:”班长”},{“Id”:2,”Name”:”李四”,”Sex”:”女”,”Description”:”小组长”},{“Id”:3,”Name”:”王五”,”Sex”:”男”,”Description”:”宣传委员”}]

使用[JsonIgnore]特性忽略字段的序列化

有时我们可能不希望某些字段参与对象的JSON序列化,此时可以在该字段上使用[JsonIgnore]特性,对象被序列化后不会包含被忽略的字段

public class Student{    public int Id { get; set; }    public string Name { get; set; }    [JsonIgnore]    public string Sex { get; set; }    public string Description { get; set; }}

输出结果:
[{“Id”:1,”Name”:”张三”,”Description”:”班长”},{“Id”:2,”Name”:”李四”,”Description”:”小组长”},{“Id”:3,”Name”:”王五”,”Description”:”宣传委员”}]

使用[JsonProperty]特性标识字段的序列化名称

有时我们可能想在对象序列化时更换字段的输出名称,譬如简化字段名称以缩短JSON字符串的长度,此时可使用[JsonProperty]特性标识字段

public class Student{    public int Id { get; set; }    public string Name { get; set; }    [JsonIgnore]    public string Sex { get; set; }    [JsonProperty("Desc")]    public string Description { get; set; }}

输出结果:
[{“Id”:1,”Name”:”张三”,”Desc”:”班长”},{“Id”:2,”Name”:”李四”,”Desc”:”小组长”},{“Id”:3,”Name”:”王五”,”Desc”:”宣传委员”}]

格式化输出JSON字符串

如果要将生成的JSON字符串以友好的格式化形式输出,可调用以下方法来转换

/// <summary>/// 格式化JSON字符串/// </summary>/// <param name="str"></param>/// <returns></returns>private static string ConvertJsonString(string str){    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;    }}

于是上面的JSON字符串可改用格式化的形式输出

List<Student> students = new List<Student>();students.Add(new Student { Id = 1, Name = "张三", Sex = "男", Description = "班长" });students.Add(new Student { Id = 2, Name = "李四", Sex = "女", Description = "小组长" });students.Add(new Student { Id = 3, Name = "王五", Sex = "男", Description = "宣传委员" });//string studentsJson = JsonConvert.SerializeObject(students);string studentsJson = ConvertJsonString(JsonConvert.SerializeObject(students));Console.WriteLine(studentsJson);

输出结果:
[
   {
       “Id”: 1,
       “Name”: “张三”,
       “Desc”: “班长”
   },
   {
       “Id”: 2,
       “Name”: “李四”,
       “Desc”: “小组长”
   },
   {
       “Id”: 3,
       “Name”: “王五”,
       “Desc”: “宣传委员”
   }
]

JSON字符串的反序列化

以下例子将构建的JSON字符串反序列化为对象,类的定义不要使用以上描述的两个附加特性

public class Student{    public int Id { get; set; }    public string Name { get; set; }    //[JsonIgnore]    public string Sex { get; set; }    //[JsonProperty("Desc")]    public string Description { get; set; }}
string inputJsonString = @"[{ Id: 1, Name: '张三', Sex: '男', Description: '班长' },{ Id: 2, Name: '李四', Sex: '女', Description: '小组长' },{ Id: 3, Name: '王五', Sex: '男', Description: '宣传委员' }]";List<Student> objects = JsonConvert.DeserializeObject<List<Student>>(inputJsonString);foreach (Student item in objects){Console.WriteLine($"Id: {item.Id}, Name: {item.Name}, Sex: {item.Sex}, Description: {item.Description}");}

输出结果:
Id: 1, Name: 张三, Sex: 男, Description: 班长
Id: 2, Name: 李四, Sex: 女, Description: 小组长
Id: 3, Name: 王五, Sex: 男, Description: 宣传委员

一般对象的序列化和反序列化

有时候我们可能需要序列化一个对象到字符串,或者反序列化字符串到对象,如对一个类进行封装传输或者存储。这首先需要使用特性[Serializable]将该对象类型标记为可序列化

// 标记类型可序列化[Serializable]public class Student{    public int Id { get; set; }    public string Name { get; set; }    public string Sex { get; set; }    public string Description { get; set; }}

一般对象的序列化和反序列化可以用以下两个方法来实现

/// <summary>/// 序列化对象到字符串/// </summary>/// <typeparam name="T"></typeparam>/// <param name="obj"></param>/// <returns></returns>private static string Serialize<T>(T obj){    try    {        IFormatter formatter = new BinaryFormatter();        MemoryStream stream = new MemoryStream();        formatter.Serialize(stream, obj);        stream.Position = 0;        byte[] buffer = new byte[stream.Length];        stream.Read(buffer, 0, buffer.Length);        stream.Flush();        stream.Close();        return Convert.ToBase64String(buffer);    }    catch (Exception ex)    {        throw new Exception(ex.Message);    }}
/// <summary>/// 反序列化字符串到对象/// </summary>/// <typeparam name="T"></typeparam>/// <param name="obj"></param>/// <param name="str"></param>/// <returns></returns>public static T Deserialize<T>(T obj, string str){    try    {        obj = default(T);        IFormatter formatter = new BinaryFormatter();        byte[] buffer = Convert.FromBase64String(str);        MemoryStream stream = new MemoryStream(buffer);        obj = (T)formatter.Deserialize(stream);        stream.Flush();        stream.Close();    }    catch (Exception ex)    {        throw new Exception(ex.Message);    }    return obj;}

以下例子使用上述两个方法实现一般对象的序列化和反序列化

List<Student> students = new List<Student>();students.Add(new Student { Id = 1, Name = "张三", Sex = "男", Description = "班长" });students.Add(new Student { Id = 2, Name = "李四", Sex = "女", Description = "小组长" });students.Add(new Student { Id = 3, Name = "王五", Sex = "男", Description = "宣传委员" });string studentsString = Serialize(students);Console.WriteLine($"序列化后的对象:\n{studentsString}");List<Student> objects = new List<Student>();objects = Deserialize(objects, studentsString);Console.WriteLine("反序列化后的对象:");foreach (Student item in objects){    Console.WriteLine($"Id: {item.Id}, Name: {item.Name}, Sex: {item.Sex}");}

输出结果:
序列化后的对象:
AAEAAAD/////AQAAAAAAAAAMAgAAAEJDb25zb2xlQXBwMSwgVmVyc2lvbj0xLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGwEAQAAAHxTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW0NvbnNvbGVBcHAxLlN0dWRlbnQsIENvbnNvbGVBcHAxLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1dAwAAAAZfaXRlbXMFX3NpemUIX3ZlcnNpb24EAAAVQ29uc29sZUFwcDEuU3R1ZGVudFtdAgAAAAgICQMAAAADAAAAAwAAAAcDAAAAAAEAAAAEAAAABBNDb25zb2xlQXBwMS5TdHVkZW50AgAAAAkEAAAACQUAAAAJBgAAAAoFBAAAABNDb25zb2xlQXBwMS5TdHVkZW50BAAAABM8SWQ+a19fQmFja2luZ0ZpZWxkFTxOYW1lPmtfX0JhY2tpbmdGaWVsZBQ8U2V4PmtfX0JhY2tpbmdGaWVsZBw8RGVzY3JpcHRpb24+a19fQmFja2luZ0ZpZWxkAAEBAQGCAAAAAQAAAAYHAAAABuW8oOS4iQYIAAAAA+eUtwYJAAAABuePremVvwEFAAAABAAAAaiAAAAGCgAAAAbmnY7lm5sGCwAAAAPlpbMGDAAAAAnlsI/nu4Tplb8BBgAAAAQAAAADAAAABg0AAAAG546L5LqUCQgAAAAGDwAAAAzlrqPkvKDlp5TlkZgL
反序列化后的对象:
Id: 1, Name: 张三, Sex: 男
Id: 2, Name: 李四, Sex: 女
Id: 3, Name: 王五, Sex: 男

到此,相信大家对“C#中怎么实现JSON功能及对象的序列化和反序列化”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: C#中怎么实现JSON功能及对象的序列化和反序列化

本文链接: https://www.lsjlt.com/news/233860.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C#中怎么实现JSON功能及对象的序列化和反序列化
    本篇内容主要讲解“C#中怎么实现JSON功能及对象的序列化和反序列化”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#中怎么实现JSON功能及对象的序列化和反序列化”吧!Newtonsoft.J...
    99+
    2023-06-03
  • C#对JSON与对象的序列化与反序列化
    一、利用Web服务中的JavaScriptSerializer 类 System.Web.Script.Serialization空间,位于System.Web.extensions...
    99+
    2022-11-13
  • C#实现对象的序列化和反序列化
    什么是序列化和反序列化: 将对象及其状态保存起来,通常是保存到文件中,叫序列化。将文件还原为对象,叫反序列化。 序列化和反序列化的接口和帮助类: 接口IFormatterobject...
    99+
    2022-11-13
    C# 序列化对象 反序列化对象
  • Java中怎么实现对象的序列化和反序列化
    这篇文章给大家分享的是有关Java中怎么实现对象的序列化和反序列化的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。引言:序列化是将对象的状态信息转换为可以存储或传输的形式的过程,在...
    99+
    2022-10-18
  • C#使用Json.Net对JSON与对象的序列化与反序列化
    目录一、使用Json.Net1、把DataTable转换成json格式,使用最新Json.Net DLL ,已经内置转换器。2、对Json.Net序列化和反序列化的控制二、空值的处理...
    99+
    2022-11-13
  • json反序列化成任意对象怎么实现
    JSON反序列化成任意对象的实现可以通过以下步骤完成: 导入JSON模块:首先需要导入Python的`json`模块,该模块提供了...
    99+
    2023-10-27
    json
  • Java对象的序列化和反序列化是什么
    这篇文章主要介绍了Java对象的序列化和反序列化是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java对象的序列化和反序列化是什么文章都会有所收获,下面我们一起来看看吧。Java 对象的序列化和反序列化是...
    99+
    2023-07-06
  • Golang中Json的序列化和反序列化怎么使用
    这篇文章主要介绍“Golang中Json的序列化和反序列化怎么使用”,在日常操作中,相信很多人在Golang中Json的序列化和反序列化怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Golang中Js...
    99+
    2023-06-30
  • C#开发中如何处理对象序列化和反序列化
    C#开发中如何处理对象序列化和反序列化,需要具体代码示例在C#开发中,对象序列化和反序列化是非常重要的概念。序列化是将对象转换为可以在网络上传输或在磁盘上存储的格式,而反序列化则是将序列化后的数据重新转换为原始对象。本文将介绍在C#中如何处...
    99+
    2023-10-22
    序列化 反序列化 对象处理
  • 使用C#怎么对XML对象进行序列化和反序列化操作
    使用C#怎么对XML对象进行序列化和反序列化操作?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。public class XMLUtil{&n...
    99+
    2023-06-06
  • Json字符串的序列化与反序列化怎么实现
    今天小编给大家分享一下Json字符串的序列化与反序列化怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们...
    99+
    2022-10-19
  • 如何使用Python中的pickle和JSON进行对象序列化和反序列化
    如何使用Python中的pickle和JSON进行对象序列化和反序列化Python是一种简单而强大的编程语言,其内置了许多有用的库和模块,使开发人员能够快速进行各种任务。其中,pickle和JSON是两个常用的模块,用于对象序列化和反序列化...
    99+
    2023-10-22
    序列化 JSON pickle
  • JavaScript如何实现基于JSON的序列化和反序列化
    这篇文章将为大家详细讲解有关JavaScript如何实现基于JSON的序列化和反序列化,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。基于JSON的序列化和反序列化(ser...
    99+
    2022-10-19
  • Java 中对象的序列化和反序列化有什么区别
    本篇文章给大家分享的是有关Java 中对象的序列化和反序列化有什么区别,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。主要内容如下:简洁的代码实现序列化实现的基本算法两种特殊的情...
    99+
    2023-05-31
    反序列化 java 序列化
  • Java IO流对象的序列化和反序列化实例详解
    Java—IO流 对象的序列化和反序列化序列化的基本操作  1.对象序列化,就是将Object转换成byte序列,反之叫对象的反序列化。  2.序列化流(ObjectOutputStream),writeObject 方法用于将对象写入输出...
    99+
    2023-05-31
    java io流 序列化
  • Python中怎么实现序列化与反序列化
    这篇文章给大家介绍Python中怎么实现序列化与反序列化,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Python序列化与反序列在程序运行的过程中,所有的变量都是在内存中,比如,定义一个 dict:d =&n...
    99+
    2023-06-15
  • C++ 轻量级对象JSON序列化实现详情
    目录1、设计思路2、匹配基本类型的Unmarshal模板3、匹配stl容器/其他第三方类库的Unmarshal模板4、匹配自定义struct/class的Unmarshal模板5、测...
    99+
    2022-11-12
  • Go Spring开发技术中,如何实现对象的序列化和反序列化?
    在Go Spring开发中,对象的序列化和反序列化是非常常见的操作。序列化是将对象转换为字节流的过程,而反序列化则是将字节流转换回对象。在本文中,我们将探讨Go Spring开发技术中如何实现对象的序列化和反序列化。 一、JSON序列化和...
    99+
    2023-07-26
    spring 开发技术 对象
  • SpringBoot之Json的序列化和反序列化问题怎么解决
    这篇文章主要讲解了“SpringBoot之Json的序列化和反序列化问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot之Json的序列化和反序列化问题怎么解决”吧...
    99+
    2023-07-02
  • Java的序列化与反序列化怎么实现
    本篇内容介绍了“Java的序列化与反序列化怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Java对象的序列化Java平台允许我们在内...
    99+
    2023-07-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作