C# 中对象与JSON字符串相互转换的三种方法

2023-05-16

JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。

  关于内存对象和JSON字符串的相互转换,在实际项目中应比较广泛,经过一番搜索,找到如下三种方法来解决此问题

分别是使用 Newtonsoft.Json.dll、DataContractJsonSerializer、 JavaScriptSerializer。 

方法一: Newtonsoft.Json.dll 

Newtonsoft.Json.dll在.net2.0之后的版本可以支持 我的版本.net framework4.0

添加Newtonsoft.json的引用

对象与json字符串转换类设计

复制代码

复制代码


 1     class JsonNewtonsoft
 2     {
 3         /// <summary>
 4         /// 把对象转换为JSON字符串
 5         /// </summary>
 6         /// <param name="o">对象</param>
 7         /// <returns>JSON字符串</returns>
 8         public static string ToJSON(this object o)
 9         {
10             if (o == null)
11             {
12                 return null;
13             }
14             return JsonConvert.SerializeObject(o);
15         }
16         /// <summary>
17         /// 把Json文本转为实体
18         /// </summary>
19         /// <typeparam name="T"></typeparam>
20         /// <param name="input"></param>
21         /// <returns></returns>
22         public static T FromJSON<T>(this string input)
23         {
24             try
25             {
26                 return JsonConvert.DeserializeObject<T>(input);
27             }
28             catch (Exception ex)
29             {
30                 return default(T);
31             }
32         }
33     }  

复制代码

复制代码

方法二:DataContractJsonSerializer

 使用这种 需要引用 System.Runtime.Serialization.dll

类设计

复制代码

复制代码


 1 class JsonDataContractJsonSerializer
 2     {
 3         /// <summary>
 4         /// 内存对象转换为json字符串
 5         /// </summary>
 6         /// <param name="obj"></param>
 7         /// <returns></returns>
 8         public static string ObjectToJson(object obj)
 9         {
10            DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
11            MemoryStream stream = new MemoryStream();
12            serializer.WriteObject(stream, obj);
13            byte[] dataBytes = new byte[stream.Length];
14            stream.Position = 0;
15            stream.Read(dataBytes, 0, (int)stream.Length);
16            return Encoding.UTF8.GetString(dataBytes);
17         }
18        /// <summary>
19        /// Json字符串转内存对象
20        /// </summary>
21        /// <param name="jsonString"></param>
22        /// <param name="obj"></param>
23        /// <returns></returns>
24         public static object JsonToObject(string jsonString, object obj)
25         {
26            DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
27            MemoryStream mStream = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
28            return serializer.ReadObject(mStream);
29         }
30     }  

复制代码

复制代码

方法三:JavaScriptSerializer

需要引用:System.Web.Extensions.dll

类设计

复制代码

复制代码


 1     public static class JsonJavaScriptSerializer
 2     {
 3         /// <summary>
 4         /// 内存对象转换为json字符串
 5         /// </summary>
 6         /// <param name="obj"></param>
 7         /// <returns></returns>
 8         public static string ToJSON(object obj)
 9         {
10             StringBuilder sb = new StringBuilder();
11             JavaScriptSerializer json = new JavaScriptSerializer();
12             json.Serialize(obj, sb);
13             return sb.ToString();
14         }
15         /// <summary>
16         /// Json字符串转内存对象
17         /// </summary>
18         /// <param name="jsonString"></param>
19         /// <param name="obj"></param>
20         /// <returns></returns>
21         public static T FromJSON<T>(string jsonString)
22         {
23             JavaScriptSerializer json = new JavaScriptSerializer();
24             return json.Deserialize<T>(jsonString);
25         }
26 
27     }  

复制代码

复制代码

程序测试:

新建一个测试对象类Student.cs

复制代码

复制代码


 1     public enum Sex
 2     {
 3         男=0,
 4         女=1
 5     }
 6     [Serializable()]
 7     class Student
 8     {
 9         private string _name;
10 
11         public string Name
12         {
13             get { return _name; }
14             set { _name = value; }
15         }
16 
17         private int _age;
18 
19         public int Age
20         {
21             get { return _age; }
22             set { _age = value; }
23         }
24 
25         private Sex _sex = Sex.男;
26 
27         public Sex Sex
28         {
29             get { return _sex; }
30             set { _sex = value; }
31         }
32         public Student()
33         { }
34         public Student(string name,int age,Sex sex)
35         {
36             this._name = name;
37             this._age = age;
38             this._sex = sex;
39         }
40     }  

复制代码

复制代码

测试程序

复制代码

复制代码


 1         static void Main(string[] args)
 2         {
 3             Student st = new Student("笨男孩",22,Sex.男);
 4 
 5             Console.WriteLine("============方法一============================================");
 6             //方法一
 7 
 8             Console.WriteLine("方法一对象转Json字符串");
 9             string jsonStr = JsonNewtonsoft.ToJSON(st);
10             Console.WriteLine(jsonStr);
11             Console.WriteLine("方法一Json字符串转对象");
12             Student stobj = (Student)JsonNewtonsoft.FromJSON<Student>(jsonStr);
13             Console.WriteLine("姓名:{0} 年龄:{1} 性别:{2}",stobj.Name,stobj.Age,stobj.Sex);
14 
15 
16             Console.WriteLine("============方法二============================================");
17             //方法二
18             Console.WriteLine("方法二对象转Json字符串");
19             string jsonStr2 = JsonDataContractJsonSerializer.ToJSON(st);
20             Console.WriteLine(jsonStr2);
21             Console.WriteLine("方法二Json字符串转对象");
22             Student stobj2 = (Student)JsonDataContractJsonSerializer.FromJSON(jsonStr2, st);
23             Console.WriteLine("姓名:{0} 年龄:{1} 性别:{2}", stobj2.Name, stobj2.Age, stobj2.Sex);
24 
25 
26             Console.WriteLine("============方法三============================================");
27             //方法二
28             Console.WriteLine("方法三对象转Json字符串");
29             string jsonStr3 = JsonJavaScriptSerializer.ToJSON(st);
30             Console.WriteLine(jsonStr3);
31             Console.WriteLine("方法三Json字符串转对象");
32             Student stobj3 = (Student)JsonJavaScriptSerializer.FromJSON<Student>(jsonStr3);
33             Console.WriteLine("姓名:{0} 年龄:{1} 性别:{2}", stobj3.Name, stobj3.Age, stobj3.Sex);
34 
35             Console.ReadKey();
36         }  

复制代码

复制代码

程序运行结果:

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 中对象与JSON字符串相互转换的三种方法 的相关文章

  • C#中使用tao.opengl绘制三维模型

    一 tao Opengl技术简介 Opengl是一种C风格的图形库 xff0c 即opengl中没有类和对象 xff0c 只有大量的函数 Opengl在内部就是一个状态机 xff0c 利用不同的函数来修改opengl状态机的状态 xff0c
  • OpenGL-坐标系概念

    笛卡尔坐标系 二维绘图 xff1a 笛卡尔坐标有一个X轴和一个Y轴组成 xff0c X轴为水平方向 xff0c Y轴为垂直方向 xff0c X和Y相互垂直 二维笛卡尔坐标系 三维绘图 xff1a 笛卡尔坐标多了一个Z轴 xff0c Z轴同时
  • C# 中类对象与JSON字符串互相转换的几种方法

    随着 Rest 风格 API 的应用越来越广泛 xff0c 对象与JSON字符串互相转换的功能也用的越来越多 这里介绍三种方法 xff0c 期中两种为DotNet Framework NET 3 5 及后续版本自带的 DataContrac
  • Mysql安装命令

    正常安装的流程是这样 1 使用 mysqld remove MySQL 命令先卸载它 2 运行命令窗口 以管理员方式打开 3 输入 xff1a mysqld initialize user 61 mysql console xff0c 成功
  • Mysql数据库常用指令

    Create table Table2 Select from Table1 新建一个表从table1中所有数据 alter table table1 add pid int unsigned not null auto increment
  • Mysql安装问题汇总

    解决Navicat连接不上MySql服务器报错 xff1a Client does not support authentication protocol requested by server consider upgrading MyS
  • Winform中提提升重绘效率-背景的设置

    backgrounglayout属性设置为none xff0c 否则会影响重绘效率
  • mac adb命令报错“zsh: command not found: adb” 及配置 .zshrc

    mac上配置adb xff0c 出现 zsh command not found adb 这个问题困扰我很久 xff0c 因为一直不怎么使用 xff0c 也就没有解决 xff0c 后期phython配置升级时也是遇到类似升级不成功的问题 x
  • Mysql安装和常用命令及问题汇总

    安装 安装mysql时如果dos提示未识别的命令或启动不了mysqld initialize mysql xff0c 可以直接运行环境变量里添加路径下的mysqld exe xff0c 如果系统缺少dll等情况时会显示提示对话框 xff0c
  • C# winform 禁用最小化和还原按钮(消息循环截获处理)

    项目中遇到一些问题 需要根据权限配置去控制用户对系统平台是否可以最小化和还原窗口大小的操作 并且屏蔽系统的一些快捷键 比如 alt 43 F4 windows键 任务管理器等一些操作 代码如下 禁止窗口最小化和还原 窗口启动之后为最大化 偷
  • c#中将HTML文件转换成PDF文件

    一 Pechkin html gt pdf 1 WinForm中转换为PDF a 在项目添加引用 xff0c 引用 gt 管理NuGet程序包 b 在导出PDF按钮中添加方法 1 SynchronizedPechkin sc 61 new
  • c#中一个进程启动另一个进程并传递参数

    1 开启进程 using System Diagnostics ProcessStartInfo process 61 new ProcessStartInfo process FileName 61 34 要开启的进程路径 34 stri
  • Window捕获消息机制及动态创建button-MFC

    PreTranslateMessage 函数捕获键盘按键消息 01 PreTranslateMessage函数 xff0c 常用于屏蔽MFC对话框中默认的Enter和ESC消息 函数原型 xff1a BOOL PreTranslateMes
  • Window捕获消息机制-C#

    C 捕获鼠标消息 在C 中怎样禁用鼠标按键 xff0c 我们可以通过ImessageFilter接口下的PreFilterMessage方法 Application类的AddMessageFilter方法 xff0c RemoveMessa
  • MFC中动态创建控件及添加消息响应的方法实例

    动态控件是指在需要时由Create 创建的控件 xff0c 这与预先在对话框中放置的控件是不同的 一 创建动态控件 xff1a 为了对照 xff0c 我们先来看一下静态控件的创建 放置静态控件时必须先建立一个容器 xff0c 一般是对话框
  • Windows消息ID号查看

    WM NULL 61 0000 WM CREATE 61 0001 应用程序创建一个窗口 WM DESTROY 61 0002 一个窗口被销毁 WM MOVE 61 0003 移动一个窗口 WM SIZE 61 0005 改变一个窗口的大小
  • MFC和c#中模拟对另一进程的窗口按钮点击

    1 在自动化测试中经常要模拟窗口按钮的点击 参考文章 xff1a http blog csdn net blackboyofsnp article details 3372719 有时我们需要这么做 手动模拟按钮按下的事件 让程序做出与按钮
  • C#中进程间通信方式汇总

    一 进程间通讯的方式 进程间通讯的方式有很多 xff0c 常用的有共享内存 xff08 内存映射文件 共享内存DLL 剪切板等 xff09 命名管道和匿名管道 发送消息等几种方法来直接完成 xff0c 另外还可以通过socket口 配置文件
  • ubuntu shared folder to windows

    一 安装smb 执行命令行 xff1a sudo apt get install samba sudo apt get install smbfs 二 添加准备共享的文件夹 有如下三种配置共享文件夹的方法 xff0c 任选一种方法即可 xf
  • C# 获得窗体句柄并发送消息(利用windows API可在不同进程中获取)

    C 使用Windows API获取窗口句柄控制其他程序窗口 编写程序模拟鼠标和键盘操作可以方便的实现你需要的功能 xff0c 而不需要对方程序为你开放接口 比如 xff0c 操作飞信定时发送短信等 我之前开发过飞信耗子 xff0c 用的是对

随机推荐

  • c#中mysql远程连接方法及实例

    region 远程数据库连接测试 需给远程数据库分配所有权限 cmd命令 xff1a grant all privileges on to 39 root 39 64 39 39 with grant option string connS
  • mysql中数据库覆盖导入的几种方式

    众所周知 xff0c 数据库中INSERT INTO语法是append方式的插入 xff0c 而最近在处理一些客户数据导入场景时 xff0c 经常遇到需要覆盖式导入的情况 xff0c 常见的覆盖式导入主要有下面两种 xff1a 1 部分覆盖
  • mysql并发写入性能分析

    目前 xff0c 在很多OLTP场景中 xff0c MySQL数据库都有着广泛的应用 xff0c 也有很多不同的使用方式 从数据库的业务需求 架构设计 运营维护 再到扩容迁移 xff0c 不同的MySQL架构有不同的特点 xff0c 适应一
  • c#中的DefWndProc是Control类的虚函数

    protected override void DefWndProc ref Message m protected override void DefWndProc ref Message m 是Control的虚函数
  • C#使用Win32API获得窗口和控件的句柄

    整个Windows编程的基础 一个句柄是指使用的一个唯一的整数值 即一个4字节 64位程序中为8字节 长的数值 来标识应用程序中的不同对象和同类中的不同的实例 诸如 一个窗口 按钮 图标 滚动条 输出设备 控件或者文件等 应用程序能够通过句
  • C/C++新建注册表项实例

    使用Windows API 函数中的RegCreateKeyEx函数来实现对注册表新建注册表项 RegCreateKeyEx函数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 原形 LONG RegCreateKeyEx
  • c#中通过win32API(FindWindowEx)查找控件句柄实例

    函数功能 该函数获得一个窗口的句柄 该窗口的类名和窗口名与给定的字符串相匹配 这个函数查找子窗口 从排在给定的子窗口后面的下 一个子窗口开始 在查找时不区分大小写 函数原型 HWND FindWindowEx HWND hwndParent
  • c#中使用消息循环机制发送接收字符串的方法和数据类型转换

    在定义消息时忘记了用户可定义消息的边界值 xff0c 在网上一阵疯找后来发现是const int WM USER 61 0x400 接着是SendMessage的lParam类型不能决定 xff08 默认是IntPtr xff09 xff0
  • C#WebApi路由机制详解

    随着前后端分离的大热 WebApi在项目中的作用也是越来越重要 可单独部署 与前端和App交互都很方便 既然有良好的发展趋势 我们当然应该顺势而为 搞懂WebApi Restful相当于给Http请求增加了语义 Post 增 Delete
  • xubuntu(ubuntu)重启后不能进入图形化界面

    问题描述 xff1a Xbuntu启动后进入了 VMware Easy Install视图 xff0c 不能进入图形化界面 问题思路 xff1a 在命令行模式下命令联想敲击时会报硬盘容量不足 xff0c 怀疑可能和硬盘大小相关 先尝试清理下
  • JSON数据格式详解

    文章目录 JSON数据格式概念 JSON的简单数据 JSON对象 对象的属性也可以是JSON对象 JSON格式表示简单数组 对象数组 使用二维数组保存 二维数组 访问淘宝的接口也可以取得JSON格式的数据 将一个对象转换成JSON数据 将一
  • C# 创建一个简单的WebApi项目

    一 创建Web API 1 创建一个新的web API项目 启动VS 2013 并在 开始页 选择 新项目 或从 文件 菜单选择 新建 然后选择 项目 在 模板 面板中选择 已安装模板 并展开 Visual C 节点 选择该节点下的 Web
  • C# 编写Web API

    1 创建Web API项目 打开VS2012 gt FILE gt New gt Project gt Web gt ASP NET MVC 4 Web Application 修改名字为WebAPIApplication 单击OK 在Pr
  • C# WebApi 返回JSON类型

    在默认情况下 当我们新建一个webapi项目 会自动返回XML格式的数据 如果我们想返回JSON的数据 可以设置下面的三种方法 nbsp 1 不用改配置文件 在Controller的方法中 直接返回HttpResponseMessage p
  • c#通过HttpClient来调用Web Api接口

    lt summary gt HttpClient实现Post请求 异步 lt summary gt static async void dooPost string url http localhost 52824 api register
  • c#使用HttpClient调用WebApi

    调用WebApi 可以利用HttpClient来进行Web Api的调用 由于WebA Api的调用本质上就是一次普通的发送请求与接收响应的过程 xff0c 所有HttpClient其实可以作为一般意义上发送HTTP请求的工具 using
  • C#中通过HttpClient发送Post请求

    C 中HttpClient进行各种类型的传输 我们可以看到 尽管PostAsync有四个重载函数 但是接受的都是HttpContent 而查看源码可以看到 HttpContent是一个抽象类 那我们就不可能直接创建HttpContent的实
  • c#中WepAPI(post/get)控制器方法创建和httpclient调用webAPI实例

    一 xff1a WebAPI创建 using System using System Collections Generic using System Linq using System Net Http using System Text
  • c#中Task线程的用法

    1 Task的优势 ThreadPool相比Thread来说具备了很多优势 xff0c 但是ThreadPool却又存在一些使用上的不方便 比如 xff1a ThreadPool不支持线程的取消 完成 失败通知等交互性操作 xff1b Th
  • C# 中对象与JSON字符串相互转换的三种方法

    JSON JavaScript Object Notation JS 对象标记 是一种轻量级的数据交换格式 关于内存对象和JSON字符串的相互转换 xff0c 在实际项目中应比较广泛 xff0c 经过一番搜索 xff0c 找到如下三种方法来