.net core精彩实例分享 -- 序列化

介绍

随着.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:运行应用程序项目,结果如下。

在这里插入图片描述

总结

本文到这里就结束了,下一篇将介绍异步和并行的知识案例。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值