文章目录

  • 介绍
  • 具体案例
    • 将类型实例序列号危机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 时可以忽略 NamespaceName 属性。

步骤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精彩实例分享 -- 序列化相关推荐

  1. .net core精彩实例分享 -- 文件与I/O

    文章目录 介绍 具体案例 创建Zip压缩文件 使用GZipStream类压缩文件 实现本地进程之间的通信 单向管道通信 总结 介绍 随着.net core越来越流行,对.net core 基础知识的了 ...

  2. .net core精彩实例分享 -- 应用配置和数据库访问

    文章目录 介绍 具体案例 自定义环境变量的命名前缀 自定义命令行参数映射 使用JSON文件来配置选项类 在应用程序运行期间创建SQLite数据库 总结 介绍 随着.net core越来越流行,对.ne ...

  3. .net core精彩实例分享 -- 依赖注入和中间件

    文章目录 介绍 具体案例 临时访问服务 以委托形式定义中间件 带参数中间件 IMiddleware中间件的用途 让 HTTP 管道"短路" 中间件的分支映射 文件服务 总结 介绍 ...

  4. .net core精彩实例分享 -- 应用启动

    文章目录 介绍 具体案例 配置Web服务器的URL 配置Web项目的调试方案 基于方法约定的Startup类 使用非预定义环境 总结 介绍 随着.net core越来越流行,对.net core 基础 ...

  5. .net core精彩实例分享 -- 反射与Composition

    文章目录 介绍 具体案例 用Activator类创建类型实例 检查类型上所应用的自定义Attribute 通过协定来约束导出类型 导入多个类型 封装元数据 总结 介绍 随着.net core越来越流行 ...

  6. .net core精彩实例分享 -- 网络编程

    文章目录 介绍 具体案例 从Web服务器上下载图片 使用HttpClient类向Web服务器提交数据 总结 介绍 随着.net core越来越流行,对.net core 基础知识的了解,实际应用等相关 ...

  7. .net core精彩实例分享 -- 异步和并行

    文章目录 介绍 具体案例 等待线程信号--ManualResetEvent 等待线程信号--AutoResetEvent 多个线程同时写一个文件 串联并行任务 使用Parallel类执行并行操作 为每 ...

  8. .net core精彩实例分享 -- LINQ

    文章目录 介绍 具体案例 将对象转为字典集合 将原始序列进行分组 按员工所属部门 DefaultIfEmpty方法的作用 将分组后的序列重新排序 使用并行LINQ 总结 介绍 随着.net core越 ...

  9. .net core精彩实例分享 -- 泛型和集合

    文章目录 介绍 具体案例 限制泛型参数只能使用值类型 泛型参数的输入和输出 将抽象类作为类型约束 使用Span提升处理字符串的性能 多个Task同时操作ConcurrenBag集合 跨线程访问Bloc ...

最新文章

  1. web设计经验七13步打造优雅的WEB字体
  2. 清华90后校友、MIT助理教授斩获ACM博士论文奖!博士期间曾发表论文20余篇
  3. yum卸载遇到的问题--待解决
  4. ios10申请权限以及弹出允许使用数据框
  5. 【ABAP实例】SAP调用RESTful API测试用例
  6. rabbitmq安装与配置(windows)亲测有效!!!
  7. Python列表和字典的方法总结
  8. C++ 中export 关键字的尴尬处境
  9. linux基础-权限管理,手工添加用户,umask,bash配置文件
  10. BZOJ 2301 Problem b
  11. 字节跳动2021内推启动啦
  12. 如何学习C4D建模并达到精通?
  13. Aspose.words之插入水印
  14. python和jsp哪个好学_Python,Java和JavaScript,学哪个编程语言好就业?
  15. jsmap(桔色棉袄配什么颜色打底衫)
  16. 贝壳找房的2021,依然充满变数
  17. [code] 胡凡算法笔记 DAY004
  18. 创意计算机手机,北京市大学生计算机应用大赛——3G智能手机创意设计作品提交书模板(游戏类).doc...
  19. docker_mysql
  20. php中英尺厘米换算,将cm换算为ft (厘米换算为英尺)

热门文章

  1. python 类函数 实例函数_python_30期【实例函数 类里面的函数】
  2. k8s redis集群_容器:K8S核心组件介绍
  3. smallint占用几个字节_面试官问我:Object o = new Object() 占用了多少个字节?
  4. 新春牛年迎春PSD分层模板!最全设计素材都在这了
  5. 年底活动那么多!!给你一组超牛的促销标签素材!!!
  6. 大火C4D元素,电商大促海报背景BANNER素材
  7. 小雪节气艺术字体设计PNG素材 | 希望可以温暖到你了
  8. UI帮手|小样机大作用
  9. 猿辅导 python_关于猿辅导机器学习项目ytk-learn和ytk-mp4j分布式机器学习库
  10. python能做页面加载动画吗_HTML+CSS实现页面加载(loading)动画效果