【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

相关文章

Python与DeepSeek的深度融合实战

《Python与DeepSeek的深度融合实战》Python作为最受欢迎的编程语言之一,以其简洁易读的语法、丰富的库和广泛的应用场景,成为了无数开发者的首选,而DeepSeek,作为人工智能领域的新星... 目录一、python与DeepSeek的结合优势二、模型训练1. 数据准备2. 模型架构与参数设置3

Java实战之利用POI生成Excel图表

《Java实战之利用POI生成Excel图表》ApachePOI是Java生态中处理Office文档的核心工具,这篇文章主要为大家详细介绍了如何在Excel中创建折线图,柱状图,饼图等常见图表,需要的... 目录一、环境配置与依赖管理二、数据源准备与工作表构建三、图表生成核心步骤1. 折线图(Line Ch

C# string转unicode字符的实现

《C#string转unicode字符的实现》本文主要介绍了C#string转unicode字符的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录1. 获取字符串中每个字符的 Unicode 值示例代码:输出:2. 将 Unicode 值格式化

Java使用Tesseract-OCR实战教程

《Java使用Tesseract-OCR实战教程》本文介绍了如何在Java中使用Tesseract-OCR进行文本提取,包括Tesseract-OCR的安装、中文训练库的配置、依赖库的引入以及具体的代... 目录Java使用Tesseract-OCRTesseract-OCR安装配置中文训练库引入依赖代码实

C#中读取XML文件的四种常用方法

《C#中读取XML文件的四种常用方法》Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具,下面我们就来看看C#中读取XML文件的方法都有哪些吧... 目录XML简介格式C#读取XML文件方法使用XmlDocument使用XmlTextReader/XmlTextWr

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程

《在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程》本文介绍了在Java中使用ModelMapper库简化Shapefile属性转JavaBean的过程,对比... 目录前言一、原始的处理办法1、使用Set方法来转换2、使用构造方法转换二、基于ModelMapper

Java实战之自助进行多张图片合成拼接

《Java实战之自助进行多张图片合成拼接》在当今数字化时代,图像处理技术在各个领域都发挥着至关重要的作用,本文为大家详细介绍了如何使用Java实现多张图片合成拼接,需要的可以了解下... 目录前言一、图片合成需求描述二、图片合成设计与实现1、编程语言2、基础数据准备3、图片合成流程4、图片合成实现三、总结前

C#比较两个List集合内容是否相同的几种方法

《C#比较两个List集合内容是否相同的几种方法》本文详细介绍了在C#中比较两个List集合内容是否相同的方法,包括非自定义类和自定义类的元素比较,对于非自定义类,可以使用SequenceEqual、... 目录 一、非自定义类的元素比较1. 使用 SequenceEqual 方法(顺序和内容都相等)2.

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep