c# json的序列化与反序列化

现在很多前端数据都用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是否能对应。

在这里插入图片描述
微信扫码关注公众号,一起学习进步,里面有满满的干货,等你来拿。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值