现在很多前端数据都用json接收,
json用的越来越多,
后台代码中也会经常性的用到json的序列化与反序列化,
把对象序列化成json字符串因为经常使用,
用的时候可以信手拈来,
但json字符串反序列化成对象,因为不是经常用,所以也记不住,
过了很长一段时间再去使用,就会忘记,
忘记了也不要紧,
网上一搜一大堆,
但是今天到网上随便搜了下,
发现很多方法写的太麻烦,
所以今天写篇博客记录一下,
把一个简单的json字符串反序列化成对象的方法献给大家。
json的序列化与反序列化
话不多说,下面进入正题
在项目中引用Newtonsoft.Json,通过Nuget可直接下载。
一、 对象序列化成json字符串
对象序列化成json字符串就不多说了,非常简单,比如下面示例,把DataSet序列化成json字符串(ds可以是任何其他对象):
string jsonStr=JsonConvert.SerializeObject(ds);
二、 json字符串反序列化成实体对象
接下来是json字符串反序列化成实体对象(也可反序列化成DataSet、DataTable,一句代码的事儿,自己琢磨琢磨),直接上代码示例,自己观察一下,很容易找到规律。下面介绍的是带实体嵌套的,单个实体的这里就不说了,非常简单,下面的示例你能看懂的话,单个实体的你肯定会写。
外层实体:
public class dataMod
{
/// <summary>
/// 采集时间
/// </summary>
public string GatherTime { get; set; }
/// <summary>
/// 数据列表
/// </summary>
public List<listMod> ListData { get; set; }
}
嵌套的实体:
public class listMod
{
/// <summary>
/// 单位
/// </summary>
public string unit { get; set; }
/// <summary>
/// 图表x轴值
/// </summary>
public string name { get; set; }
/// <summary>
/// 图表y轴值
/// </summary>
public decimal y { get; set; }
}
json字符串:
[{
"GatherTime": "2020",
"ListData": [{
"name": "全市",
"y": 5.86
}, {
"name": "大塘山",
"y": 7.63
}, {
"name": "春华路",
"y": 5.49
}, {
"name": "青杠林路 ",
"y": 7.57
}, {
"name": "檀木林体育馆",
"y": 9.99
}]
}, {
"GatherTime": "2019",
"ListData": [{
"name": "全市",
"y": 13.00
}, {
"name": "大塘山",
"y": 5.22
}, {
"name": "春华路",
"y": 6.22
}, {
"name": "青杠林路",
"y": 5.86
}, {
"name": "檀木林体育馆",
"y": 7.37
}]
}]
把json字符串反序列化成list实体对象,我看其他方法在这一步写的比较复杂,而在这里,也就一句代码的事儿(下面的参数jsonStr,就是上面的json字符串):
List<dataMod> listData = JsonConvert.DeserializeObject<List<dataMod>>(jsonStr);
最后附上一张结果图
如果你的反序列化没成功,请检查两个点:
1、检查你的json字符串是否正确,可在这里进行校验:bejson.com
2、检查你的实体字段与json字符串的key是否能对应。
微信扫码关注公众号,一起学习进步,里面有满满的干货,等你来拿。