【C#实战】SimpleJSON字典反序列化

2024-03-27 06:04

本文主要是介绍【C#实战】SimpleJSON字典反序列化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

C# 解析JSON道路千万条,其中最流行的还是由Newtonsoft出品的Json.NET,只需要将Json的结构做成C#的class,即可实现完美的序列化和反序列化。更重要的是它还支持LINQ。

Product product = new Product();
product.Name = "Apple";
product.Expiry = new DateTime(2008, 12, 28);
product.Sizes = new string[] { "Small" };string json = JsonConvert.SerializeObject(product);
// {
//   "Name": "Apple",
//   "Expiry": "2008-12-28T00:00:00",
//   "Sizes": [
//     "Small"
//   ]
// }
string json = @"{'Name': 'Bad Boys','ReleaseDate': '1995-4-7T00:00:00','Genres': ['Action','Comedy']
}";Movie m = JsonConvert.DeserializeObject<Movie>(json);string name = m.Name;
// Bad Boys
JArray array = new JArray();
array.Add("Manual text");
array.Add(new DateTime(2000, 5, 23));JObject o = new JObject();
o["MyArray"] = array;string json = o.ToString();
// {
//   "MyArray": [
//     "Manual text",
//     "2000-05-23T00:00:00"
//   ]
// }

但也不妨有同志因为SDK大小等种种原因寻求一个轻量替代方案,SimpleJSON就是其中一个选择,只用一个C#脚本就干完了JSON解析的事儿

SimpleJSON的用法很简单,(当然老规矩,还得是基于我的一个开源项目来讲,欢迎点个star)先读出来json字符串,然后用JSONNode.Parse(你的字符串)即可获得反序列化JSON文件后的根节点。

public static void Initialize(){Configuration = JSONNode.Parse(File.ReadAllText("appsettings.json"));}

如上面代码所示,我的json字符串在一个叫appsettings.json文件里,文件内容如下:

{"Discord": {"token": "your-bot-token","channel": "your-channel-id","logChannel": "your-bot-log-channel-id (leave it empty if you dont want log. )"},"Unity": [{"2022.3.14f1": "E:\\Program Files\\Unity 2022.3.14f1\\Editor\\Unity.exe"}],"Projects": [{"name": "example","path": "D:\\Unity_Projects\\example","unityVersion": "2022.3.14f1","playerBuildOutput": "D:\\Unity_Projects\\example\\Build","addressableBuildOutput": "D:\\Unity_Projects\\example\\ServerData"}],"Ssh": {"address": "","user": "","password": "","privateKeyPath": "","keepAliveInterval": "-1","expectedFingerprints": []}
}

其中Unity节点下是一个列表,列表相当于是一个Dictionary<string, JSONNode>,我们得稍微处理一下。

EditorInstallations = new Dictionary<string, string>();foreach (JSONNode node in ConfigurationUtility.Configuration["Unity"].AsArray){foreach (var kvp in node){EditorInstallations.Add(kvp.Key, kvp.Value.Value);_logger.LogInformation($"[{GetType()}] Found a Unity Editor installation! {kvp.Key}, {kvp.Value}");}}

对于这种列表的情况,SimpleJSON给我们预留了JSONArray,里面包含了JSONNode列表。

我们再进到JSONNode去看,你会发现JSONNode其实是有KeyValuePair的。

Key是一个string,也就是字段名,Value还是一个JSONNode,至于怎么处理Value里的东西就看当时怎么规定的类型了。如果是string,那就直接拿JSONNode的Value就可以了。

⚠重要提醒:有同志用ToString习惯了直接就上去用了,这是不太对的。虽说SimpleJSON的确实现了ToString方法,但其实干的事情和函数名不是完全一致,它实际上是返回了JSON字符串,和我们理解的string的不同点在于它返回的字符串的开头和结尾会带着双引号!请务必注意这一点,除非你有特殊需求,否则请直接从JSONNode.Value拿。关于这块的更详细解释,请见此issue。

看到这里估计你就应该明白为什么这么写了。祝编程愉快!

这篇关于【C#实战】SimpleJSON字典反序列化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/851151

相关文章

C# Where 泛型约束的实现

《C#Where泛型约束的实现》本文主要介绍了C#Where泛型约束的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录使用的对象约束分类where T : structwhere T : classwhere T : ne

C#实现将Excel表格转换为图片(JPG/ PNG)

《C#实现将Excel表格转换为图片(JPG/PNG)》Excel表格可能会因为不同设备或字体缺失等问题,导致格式错乱或数据显示异常,转换为图片后,能确保数据的排版等保持一致,下面我们看看如何使用C... 目录通过C# 转换Excel工作表到图片通过C# 转换指定单元格区域到图片知识扩展C# 将 Excel

Python列表去重的4种核心方法与实战指南详解

《Python列表去重的4种核心方法与实战指南详解》在Python开发中,处理列表数据时经常需要去除重复元素,本文将详细介绍4种最实用的列表去重方法,有需要的小伙伴可以根据自己的需要进行选择... 目录方法1:集合(set)去重法(最快速)方法2:顺序遍历法(保持顺序)方法3:副本删除法(原地修改)方法4:

C#中async await异步关键字用法和异步的底层原理全解析

《C#中asyncawait异步关键字用法和异步的底层原理全解析》:本文主要介绍C#中asyncawait异步关键字用法和异步的底层原理全解析,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录C#异步编程一、异步编程基础二、异步方法的工作原理三、代码示例四、编译后的底层实现五、总结C#异步编程

在Spring Boot中浅尝内存泄漏的实战记录

《在SpringBoot中浅尝内存泄漏的实战记录》本文给大家分享在SpringBoot中浅尝内存泄漏的实战记录,结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录使用静态集合持有对象引用,阻止GC回收关键点:可执行代码:验证:1,运行程序(启动时添加JVM参数限制堆大小):2,访问 htt

C#TextBox设置提示文本方式(SetHintText)

《C#TextBox设置提示文本方式(SetHintText)》:本文主要介绍C#TextBox设置提示文本方式(SetHintText),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录C#TextBox设置提示文本效果展示核心代码总结C#TextBox设置提示文本效果展示核心代

C#中DrawCurve的用法小结

《C#中DrawCurve的用法小结》本文主要介绍了C#中DrawCurve的用法小结,通常用于绘制一条平滑的曲线通过一系列给定的点,具有一定的参考价值,感兴趣的可以了解一下... 目录1. 如何使用 DrawCurve 方法(不带弯曲程度)2. 如何使用 DrawCurve 方法(带弯曲程度)3.使用Dr

如何配置Spring Boot中的Jackson序列化

《如何配置SpringBoot中的Jackson序列化》在开发基于SpringBoot的应用程序时,Jackson是默认的JSON序列化和反序列化工具,本文将详细介绍如何在SpringBoot中配置... 目录配置Spring Boot中的Jackson序列化1. 为什么需要自定义Jackson配置?2.

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当