工作生活

Newstonsoft.Json 使用之Json转DataTab

2019-07-04  本文已影响0人  Memoyu

认知尚浅,如有错误,愿闻其详!

概述

  在公司项目中,为了项目分工更明确,采用前后端分离的形式开发,后端为.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数据源,这样即可显示数据了。

上一篇下一篇

猜你喜欢

热点阅读