.NET处理Json的几种方式

时间:2022-01-27 08:31:38

序列化里的xml,soap,binary在上一篇文章里面已经说过了,这篇主要说json。

json是目前非常流行的一种序列化数据的方式,很多api都采用的是json,结构简洁,容易理解,适用性强,逐渐代替之前的xml在各个数据传输和存储的领域的使用,比如VS Code的配置文件:

.NET处理Json的几种方式

json格式的结构很简单,分号隔开的键值堆构成,逗号隔开,{}表示对象,[]表示集合,值可以是数字,字符串,布尔,数组,对象,null,其他的一些细节请看规范资料即可。

下面就说说json序列化的几种方式:

JavaScriptSerializer类

需要给项目引用System.Web.Extensions.dll,命名空间是System.Web.Script.Serialization,被序列化的类无需加任何特性

序列化和反序列化的代码如下:

JavaScriptSerializer js = new JavaScriptSerializer();
string json = js.Serialize(p);
Console.WriteLine(json);
Console.WriteLine("Serialization Done"); Person new_p = js.Deserialize<Person>(json);
Console.WriteLine(new_p.Name);

DataContractJsonSerializer类

需要引用System.Runtime.Serialization.dll,命名空间System.Runtime.Serialization.Json,被序列化的类需要加WCF数据契约一样的特性来显式声明。

[DataContract]
public class Person
{
[DataMember]
public string Name { get; set; }
[DataMember]
public int Age { get; set; }
[DataMember]
public string Major { get; set; }
}

序列化代码如下:

DataContractJsonSerializer js = new DataContractJsonSerializer(typeof(Person));
MemoryStream ms = new MemoryStream();
js.WriteObject(ms,p);
ms.Position = 0;
string json = Encoding.Default.GetString(ms.ToArray());
Console.WriteLine(json); MemoryStream ms_new = new MemoryStream(Encoding.Default.GetBytes(json));
Person pp = js.ReadObject(ms_new) as Person;
Console.WriteLine(pp.Name);

可以看出这个方式操作的是流,所以略微繁琐一些。

Json.NET类库,也就是大名鼎鼎的Newtonjson

Json.NEt类库,地址https://www.newtonsoft.com/json

功能很多很强大,我这里也只说一下最基本的。

直接通过Nuget可以安装到项目中。

.NET处理Json的几种方式

这是它的命名空间,平常用到最多的是Newtonsoft.Json这个。常用到的类是JsonConvert工具类,方法DeserializeObjectDeserializeObject<T>SerializeObject

直接上代码,很容易看,这种泛型方法可以直接转换成对象:

var json = JsonConvert.SerializeObject(p);
Console.WriteLine(json); var pp = JsonConvert.DeserializeObject<Person>(json);
Console.WriteLine(pp.Name); var jobj = JsonConvert.DeserializeObject(json) as JObject;
Console.WriteLine(jobj.GetType());
foreach (var item in jobj)
{
Console.WriteLine($"{item.Key}:{item.Value}");
}

而要将一个json结构很方便的转换为C#类,有专门的转化网站,但最简单的还是VS的选择性粘贴功能。

使用方法是:新建一个空cs文件,里面的东西都删除干净。然后复制json内容,选择VS的编辑菜单的选择性粘贴功能,里面有将json粘贴为类和将xml粘贴为类,有些转换过来不符合.NET规范的可以通过DataContract或者DAtaMemember进行注解。

.NET处理Json的几种方式

当然,也可以直接使用dynamic类型来实现对应功能,优缺点其实也就是dynamic的优缺点。

var json = JsonConvert.SerializeObject(ps);
Console.WriteLine(json); dynamic persons = JsonConvert.DeserializeObject<dynamic>(json);
foreach (var item in persons)
{
Console.WriteLine(item.Name);
}

参考文章

在C#中,Json的序列化和反序列化的几种方式总结

Json的序列化与反序列化

Json教程

.NET处理Json的几种方式的更多相关文章

  1. c&num;操作json的两种方式

    总结一下C#操作json的两种方式,都是将对象和json格式相转. 1.JavaScriptSerializer,继承自System.Web.Script.Serialization private ...

  2. python 全栈开发,Day94&lpar;Promise&comma;箭头函数&comma;Django REST framework&comma;生成json数据三种方式&comma;serializers&comma;Postman使用&comma;外部python脚本调用django&rpar;

    昨日内容回顾 1. 内容回顾 1. VueX VueX分三部分 1. state 2. mutations 3. actions 存放数据 修改数据的唯一方式 异步操作 修改state中数据的步骤: ...

  3. MVC web api 返回JSON的几种方式,Newtonsoft&period;Json序列化日期时间去T的几种方式。

    原文链接:https://www.muhanxue.com/essays/2015/01/8623699.html MVC web api 返回JSON的几种方式 1.在WebApiConfig的Re ...

  4. js中将字符串转换成json的三种方式

    1,eval方式解析,恐怕这是最早的解析方式了.如下: function strToJson(str){ var json = eval('(' + str + ')'); return json; ...

  5. SpringMVC 返回json的两种方式

    前后台数据交互使用json是一种很重要的方式.本文主要探讨SpringMVC框架使用json传输的技术. 请注意,本文所提到的项目使用Spring 版本是4.1.7,其他版本在具体使用上可能有不一样的 ...

  6. Java中将xml文件转化为json的两种方式

    原文地址https://blog.csdn.net/a532672728/article/details/76312475 最近有个需求,要将xml转json之后存储在redis中,找来找去发现整体来 ...

  7. 字符串转换成JSON的三种方式

    采用Ajax的项目开发过程中,经常需要将JSON格式的字符串返回到前端,前端解析成JS对象(JSON ).ECMA-262(E3) 中没有将JSON概念写到标准中,但在 ECMA-262(E5) 中J ...

  8. ajax操作json的三种方式

    一. 什么是json? 1. JSON是一种轻量级的数据交换格式 2. JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在网络或者程序之间轻松地传递这个字符串,并在 ...

  9. C&num;解析json的两种方式

    C#中Json转换主要使用的几种方法! 这篇主要介绍2.4.第三种方法使用的比较局限,所以我没有深入学习. 第二种方法 我使用比较多的方式,这个方法是.NET内置的,使用起来比较方便 A.利用seri ...

随机推荐

  1. 8&period;3 使用Fluent API进行属性映射【Code-First系列】

    现在,我打算学习,怎么用Fluent API来配置领域类中的属性. using System; using System.Collections.Generic; using System.Linq; ...

  2. 一看便知&lowbar;配置linux 网络配置的几种方法

    一. -    setup    进入设置  -    /etc/rc.d/init.d/network  restart    运行完才会生效刚才的修改    二.命令设置 [临时生效]-    i ...

  3. 简单实现异步编程promise模式

    本篇文章主要介绍了异步编程promise模式的简单实现,并对每一步进行了分析,需要的朋友可以参考下 异步编程 javascript异步编程, web2.0时代比较热门的编程方式,我们平时码的时候也或多 ...

  4. js拖拽换位置,使用数组方法

    之前一直需要一个拖拽效果,网上找了些感觉不是不好用,就是写的有些地方让人不太满意,下面贡献一个自己写的.亲测可用,拖动后可互换位置!(带有注释) 方法/步骤 CSS代码部分 <style> ...

  5. eclispse 中集成多个tomcat

    1.背景 在本地需要运行两个项目进行测试时,需要同时启动两个服务器,所以集成多个Tomcat到eclipse就成为一个必要的知识点. 2.准备知识 2.1 因为同时在一台主机上运行,所以多个服务器共用 ...

  6. VS2010连接SQLite数据库

    Visual studio 2010及以上版本,连接SQLite数据库 1.在Sqlite开发站点下载SQLite的.exe安装包 Ctrl+F搜索这条语句:This is the only setu ...

  7. 事务处理&colon; databse jdbc mybatis spring

    事务的认识需要一个相当漫长的流程,慢慢在实践中理解,然后在强化相关理论基础. 数据库中的事务: 传统的本地事务处理都是依靠数据库自身事务处理能力,而事务本身是传统关系型数据库的基石.简单来说事务就是一 ...

  8. FFT算法的物理意义

    FFT是离散傅立叶变换的高速算法,能够将一个信号变换到频域.有些信号在时域上是非常难看出什么特征的,可是如果变换到频域之后,就非常easy看出特征了.这就是非常多信号分析採用FFT变换的原因.另外,F ...

  9. Python Learning - Two

    1.  Built-in Modules and Functions 1) Function def greeting(name): print("Hello,", name) g ...

  10. 使用Epplus生成Excel 图表

    1.  前言 这是我最近项目刚要的需求,然后在网上找了半天的教材  但是很不幸,有关于Epplus的介绍真的太少了,然后经过了我的不断研究然后不断的采坑,知道现在看到Excel都想吐的时候,终于成功的 ...