认知尚浅,如有错误,愿闻其详!
概述
在公司项目中,为了项目分工更明确,采用前后端分离的形式开发,后端为.NET WebAPI开发,前端Winform的展示数据与需要增删查改,主要是通过对API的访问数据交互。而现行的API数据传输大多都是通过JSON、XML等进行数据组合,然后传输。所以就要对数据进行序列化与反序列化。
在今天的问题之前,我都还是很单纯的去对JSON数据进行面向数据模型的解析,将数据直接解析存入对象,然后再存入List,再将其作为数据源,赋值给DataGridView展示出来。听起来就很麻烦!
下面就记录一下,关于Newstonsoft的一些用法:官方文档例子
一、数据模型对象转JSON
序列化对象成JSON很简单,因为Newstonsoft封装的方法,我们甚至没必要去了解内部实现,直接调用即可获得相应的JSON数据,方法如下:
//将数据模型传入和指定格式
string json = JsonConvert.SerializeObject(DataModel,Formatting.Indented);
二、JSON转数据模型对象
反序列化成对应的数据模型对象亦是如此:
//将目标对象与JSON数据传入,返回目标对象
DataModel model = JsonConvert.DeserializeObject<DataModel>(json);
三、JSON转DataTable
Newstonsoft官方文档中介绍中是这样使用的
string json = @"{
'Table1': [
{
'id': 0,
'item': 'item 0'
},
{
'id': 1,
'item': 'item 1'
}
]
}";
//首先是先将JSON中的数据反序列化到DataSet中
DataSet dataSet = JsonConvert.DeserializeObject<DataSet>(json);
//r然后获取DataSet中指定的表
DataTable dataTable = dataSet.Tables["Table1"];
Console.WriteLine(dataTable.Rows.Count);
// 2
foreach (DataRow row in dataTable.Rows)
{
Console.WriteLine(row["id"] + " - " + row["item"]);
}
上例中DataSet可以比作一个内存中的数据库,DataTable是一个内存中的数据表,DataSet里可以存储多个DataTable。
不过我在我的实际项目中使用并没有成功,可能是JSON数据结构的原因,后来直接使用一下方式也可以用:
//直接将获取到的JSON中的数据反序列化成DataTable中
DataTabledataSet = JsonConvert.DeserializeObject<DataTable>(json);
最后,再将获取到的DataTable赋值给DataGridView数据源,这样即可显示数据了。