- 介绍
- 具体案例
- 将类型实例序列号危机JSON格式
- 将数据协定序列化为JSON格式
- 总结
随着.net core
越来越流行,对.net core
基础知识的了解,实际应用等相关的知识也应该有所了解。所以就有了这篇文章,案例都是来自阅读的书籍,或者实际工作中感觉比较有用的应用。分享亦总结。
本文主要介绍 .net core
相关的序列化案例。
【导语】
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
对象会被一对中括号([])括起来。
【导语】
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:运行应用程序项目,结果如下。
本文到这里就结束了,下一篇将介绍异步和并行的知识案例。