.net core精彩实例分享 -- 序列化
文章目录
- 介绍
- 具体案例
- 将类型实例序列号危机JSON格式
- 将数据协定序列化为JSON格式
- 总结
介绍
随着.net core
越来越流行,对.net core
基础知识的了解,实际应用等相关的知识也应该有所了解。所以就有了这篇文章,案例都是来自阅读的书籍,或者实际工作中感觉比较有用的应用。分享亦总结。
本文主要介绍 .net core
相关的序列化案例。
具体案例
将类型实例序列号危机JSON格式
【导语】
DataContractJsonSerializer
类(位于 System.Runtime.Serialization.Json
命名空间中)支持把类型实例序列化为 JSON
数据格式。JSON
数据格式的提交小,结构简单,在跨平台与跨网络传输数据时更为方便,因此在 Web
领域被广泛使用。
【操作流程】
步骤1:新建控制台应用程序项目。
步骤2:声明 Pet
类,它包含三个公共属性,稍后将演示如何将包含 Pet
对象的数据序列化为 JSON
数据。
public class Pet
{public string Name { get; set; }public int Age { get; set; }public string Owner { get; set; }
}
步骤3:执行序列化。
using (FileStream stream = File.Open(fileName, FileMode.OpenOrCreate))
{Pet[] pets ={new Pet { Name = "Dog A", Age = 3, Owner = "Jack" },new Pet { Name = "Cat E", Age = 2, Owner = "Bob" }};DataContractJsonSerializer sz = new DataContractJsonSerializer(pets.GetType());sz.WriteObject(stream, pets);
}
步骤4:执行反序列化。
using(FileStream fs = File.OpenRead(fileName))
{DataContractJsonSerializer sz = new DataContractJsonSerializer(typeof(Pet[]));Pet[] petsarr = (Pet[])sz.ReadObject(fs);// 输出数组中的元素foreach(Pet p in petsarr){Console.WriteLine($"Name: {p.Name}\nAge: {p.Age}\nOwner: {p.Owner}\n");}
}
注意:由于序列化和反序列化的实际类型是数组类型,因此在实例化
DataContractJsonSerializer
类时应该将type
类型指定为typeof(Pet[])
。
步骤5:运行应用程序,反序列化的内容如下。
本实例序列化Pet
数组后产生的JSON
如下。
[{"Age":3,"Name":"Dog A","Owner":"Jack"},{"Age":2,"Name":"Cat E","Owner":"Bob"}
]
由于元对象是数组类型的,所以生成的 JSON
对象会被一对中括号([])括起来。
将数据协定序列化为JSON格式
【导语】
DataContractSerializer
类默认将数据协定为XML格式序列化,若需要序列化为JSON格式,就得使用 DataContractJsonSerializer
类(位于 System.Runtime.Serialization.Json
命名空间下),该类的使用方法与 DataContractSerializer
类是一样的,只是输出的数据格式不同而已。
【操作流程】
步骤1:新建控制台应用程序项目。
步骤2:声明 Sample
类,它包含三个公共字段。
[DataContract]
public class Sample
{[DataMember(Name = "val_1")]public double TestVal1;[DataMember(Name = "val_2")]public DateTime TestVal2;[DataMember(Name = "val_3")]public uint TestVal3;
}
注意:由于
JSON
对象是使用一对大括号括起来的,没有根元素,因此在应用DataContractAttribute
时可以忽略Namespace
和Name
属性。
步骤3:执行序列化,并将结果输出到文件中。
using(FileStream fs = new FileStream("data.json", FileMode.Create))
{Sample sl = new Sample{TestVal1 = 333.6515d,TestVal2 = DateTime.Now,TestVal3 = 797001};DataContractJsonSerializer jsonsz = new DataContractJsonSerializer(typeof(Sample));jsonsz.WriteObject(fs, sl);
}
步骤4:执行反序列化,从文件中读取数据,填充一个 Sample
类的实例,然后在控制台输出各个公共字段的值。
using(FileStream fs = new FileStream("data.json", FileMode.Open))
{DataContractJsonSerializer jssz = new DataContractJsonSerializer(typeof(Sample));Sample obj = jssz.ReadObject(fs) as Sample;Console.Write($"{nameof(Sample.TestVal1)} = {obj.TestVal1}\n{nameof(Sample.TestVal2)} = {obj.TestVal2}\n{nameof(Sample.TestVal3)} = {obj.TestVal3}");
}
步骤5:运行应用程序项目,结果如下。
总结
本文到这里就结束了,下一篇将介绍异步和并行的知识案例。
.net core精彩实例分享 -- 序列化相关推荐
- .net core精彩实例分享 -- 文件与I/O
文章目录 介绍 具体案例 创建Zip压缩文件 使用GZipStream类压缩文件 实现本地进程之间的通信 单向管道通信 总结 介绍 随着.net core越来越流行,对.net core 基础知识的了 ...
- .net core精彩实例分享 -- 应用配置和数据库访问
文章目录 介绍 具体案例 自定义环境变量的命名前缀 自定义命令行参数映射 使用JSON文件来配置选项类 在应用程序运行期间创建SQLite数据库 总结 介绍 随着.net core越来越流行,对.ne ...
- .net core精彩实例分享 -- 依赖注入和中间件
文章目录 介绍 具体案例 临时访问服务 以委托形式定义中间件 带参数中间件 IMiddleware中间件的用途 让 HTTP 管道"短路" 中间件的分支映射 文件服务 总结 介绍 ...
- .net core精彩实例分享 -- 应用启动
文章目录 介绍 具体案例 配置Web服务器的URL 配置Web项目的调试方案 基于方法约定的Startup类 使用非预定义环境 总结 介绍 随着.net core越来越流行,对.net core 基础 ...
- .net core精彩实例分享 -- 反射与Composition
文章目录 介绍 具体案例 用Activator类创建类型实例 检查类型上所应用的自定义Attribute 通过协定来约束导出类型 导入多个类型 封装元数据 总结 介绍 随着.net core越来越流行 ...
- .net core精彩实例分享 -- 网络编程
文章目录 介绍 具体案例 从Web服务器上下载图片 使用HttpClient类向Web服务器提交数据 总结 介绍 随着.net core越来越流行,对.net core 基础知识的了解,实际应用等相关 ...
- .net core精彩实例分享 -- 异步和并行
文章目录 介绍 具体案例 等待线程信号--ManualResetEvent 等待线程信号--AutoResetEvent 多个线程同时写一个文件 串联并行任务 使用Parallel类执行并行操作 为每 ...
- .net core精彩实例分享 -- LINQ
文章目录 介绍 具体案例 将对象转为字典集合 将原始序列进行分组 按员工所属部门 DefaultIfEmpty方法的作用 将分组后的序列重新排序 使用并行LINQ 总结 介绍 随着.net core越 ...
- .net core精彩实例分享 -- 泛型和集合
文章目录 介绍 具体案例 限制泛型参数只能使用值类型 泛型参数的输入和输出 将抽象类作为类型约束 使用Span提升处理字符串的性能 多个Task同时操作ConcurrenBag集合 跨线程访问Bloc ...
最新文章
- web设计经验七13步打造优雅的WEB字体
- 清华90后校友、MIT助理教授斩获ACM博士论文奖!博士期间曾发表论文20余篇
- yum卸载遇到的问题--待解决
- ios10申请权限以及弹出允许使用数据框
- 【ABAP实例】SAP调用RESTful API测试用例
- rabbitmq安装与配置(windows)亲测有效!!!
- Python列表和字典的方法总结
- C++ 中export 关键字的尴尬处境
- linux基础-权限管理,手工添加用户,umask,bash配置文件
- BZOJ 2301 Problem b
- 字节跳动2021内推启动啦
- 如何学习C4D建模并达到精通?
- Aspose.words之插入水印
- python和jsp哪个好学_Python,Java和JavaScript,学哪个编程语言好就业?
- jsmap(桔色棉袄配什么颜色打底衫)
- 贝壳找房的2021,依然充满变数
- [code] 胡凡算法笔记 DAY004
- 创意计算机手机,北京市大学生计算机应用大赛——3G智能手机创意设计作品提交书模板(游戏类).doc...
- docker_mysql
- php中英尺厘米换算,将cm换算为ft (厘米换算为英尺)
热门文章
- python 类函数 实例函数_python_30期【实例函数 类里面的函数】
- k8s redis集群_容器:K8S核心组件介绍
- smallint占用几个字节_面试官问我:Object o = new Object() 占用了多少个字节?
- 新春牛年迎春PSD分层模板!最全设计素材都在这了
- 年底活动那么多!!给你一组超牛的促销标签素材!!!
- 大火C4D元素,电商大促海报背景BANNER素材
- 小雪节气艺术字体设计PNG素材 | 希望可以温暖到你了
- UI帮手|小样机大作用
- 猿辅导 python_关于猿辅导机器学习项目ytk-learn和ytk-mp4j分布式机器学习库
- python能做页面加载动画吗_HTML+CSS实现页面加载(loading)动画效果