下面是详细的攻略。
C#中datatable序列化与反序列化实例分析
简介
DataTable(数据表)是C#中用来存储表格形式数据的对象,它可以存储各种数据类型(比如字符串、整数、浮点数等)。在开发中,我们经常需要将DataTable传输到其他地方(比如网络上)或者将其保存到文件中等,这时我们就需要对DataTable进行序列化和反序列化。
序列化
序列化是将对象转换成可存储或传输的格式,我们又称为序列化的形式。在C#中,我们可以使用Json或者Xml格式将DataTable序列化,下面我们以Json为例进行介绍。
使用Newtonsoft.Json进行序列化
我们可以使用第三方库Newtonsoft.Json进行序列化。
using Newtonsoft.Json;
string jsonString = JsonConvert.SerializeObject(dataTable, Formatting.Indented);
其中,SerializeObject
方法接受一个对象和一个Formatting
枚举值(可选)作为参数,返回一个序列化后的字符串。Formatting.Indented
参数表示生成带有缩进的格式,可读性更高。
反序列化
反序列化是将序列化后的数据转换回对象。在C#中,我们可以使用Json或者Xml格式将DataTable反序列化,下面我们以Json为例进行介绍。
使用Newtonsoft.Json进行反序列化
我们可以使用第三方库Newtonsoft.Json进行反序列化。
using Newtonsoft.Json;
DataTable dataTable = JsonConvert.DeserializeObject<DataTable>(jsonString);
其中,DeserializeObject
方法接受一个字符串作为参数,并返回一个反序列化后的对象。这里我们使用了泛型方法,传入了DataTable类型,需要确保序列化前的对象是DataTable类型。
示例
示例一:Json格式序列化保存到文件中
我们定义一个DataTable对象,并对其进行赋值。
DataTable dataTable = new DataTable("MyDataTable");
dataTable.Columns.Add("Id", typeof(int));
dataTable.Columns.Add("Name", typeof(string));
DataRow row1 = dataTable.NewRow();
row1["Id"] = 1;
row1["Name"] = "Alice";
dataTable.Rows.Add(row1);
DataRow row2 = dataTable.NewRow();
row2["Id"] = 2;
row2["Name"] = "Bob";
dataTable.Rows.Add(row2);
然后,我们将该DataTable对象序列化成Json格式,并保存到文件中:
using Newtonsoft.Json;
using System.IO;
string jsonString = JsonConvert.SerializeObject(dataTable, Formatting.Indented);
File.WriteAllText("table.json", jsonString);
最后,我们从文件中读取Json格式的数据,并将其反序列化为DataTable对象:
DataTable dataTable = JsonConvert.DeserializeObject<DataTable>(File.ReadAllText("table.json"));
示例二:Json格式序列化传输到网络上
我们定义一个DataTable对象,并对其进行赋值。
DataTable dataTable = new DataTable("MyDataTable");
dataTable.Columns.Add("Id", typeof(int));
dataTable.Columns.Add("Name", typeof(string));
DataRow row1 = dataTable.NewRow();
row1["Id"] = 1;
row1["Name"] = "Alice";
dataTable.Rows.Add(row1);
DataRow row2 = dataTable.NewRow();
row2["Id"] = 2;
row2["Name"] = "Bob";
dataTable.Rows.Add(row2);
然后,我们将该DataTable对象序列化成Json格式,并传输到网络上(这里我们使用HttpClient进行模拟):
using Newtonsoft.Json;
using System.Net.Http;
using System.Text;
string jsonString = JsonConvert.SerializeObject(dataTable, Formatting.Indented);
HttpClient client = new HttpClient();
var content = new StringContent(jsonString, Encoding.UTF8, "application/json");
HttpResponseMessage response = client.PostAsync(url, content).Result;
最后,我们从网络上接收Json格式的数据,并将其反序列化为DataTable对象:
string jsonString = response.Content.ReadAsStringAsync().Result;
DataTable dataTable = JsonConvert.DeserializeObject<DataTable>(jsonString);
总结
本文介绍了C#中DataTable的序列化和反序列化,并给出了Json格式序列化保存到文件和传输到网络上的示例。序列化和反序列化可以帮助我们方便地传输或保存DataTable对象。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#中datatable序列化与反序列化实例分析 - Python技术站