【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

相关文章

PostgreSQL简介及实战应用

《PostgreSQL简介及实战应用》PostgreSQL是一种功能强大的开源关系型数据库管理系统,以其稳定性、高性能、扩展性和复杂查询能力在众多项目中得到广泛应用,本文将从基础概念讲起,逐步深入到高... 目录前言1. PostgreSQL基础1.1 PostgreSQL简介1.2 基础语法1.3 数据库

Python WebSockets 库从基础到实战使用举例

《PythonWebSockets库从基础到实战使用举例》WebSocket是一种全双工、持久化的网络通信协议,适用于需要低延迟的应用,如实时聊天、股票行情推送、在线协作、多人游戏等,本文给大家介... 目录1. 引言2. 为什么使用 WebSocket?3. 安装 WebSockets 库4. 使用 We

C#高效实现Word文档内容查找与替换的6种方法

《C#高效实现Word文档内容查找与替换的6种方法》在日常文档处理工作中,尤其是面对大型Word文档时,手动查找、替换文本往往既耗时又容易出错,本文整理了C#查找与替换Word内容的6种方法,大家可以... 目录环境准备方法一:查找文本并替换为新文本方法二:使用正则表达式查找并替换文本方法三:将文本替换为图

Spring Boot 整合 SSE(Server-Sent Events)实战案例(全网最全)

《SpringBoot整合SSE(Server-SentEvents)实战案例(全网最全)》本文通过实战案例讲解SpringBoot整合SSE技术,涵盖实现原理、代码配置、异常处理及前端交互,... 目录Spring Boot 整合 SSE(Server-Sent Events)1、简述SSE与其他技术的对

Java整合Protocol Buffers实现高效数据序列化实践

《Java整合ProtocolBuffers实现高效数据序列化实践》ProtocolBuffers是Google开发的一种语言中立、平台中立、可扩展的结构化数据序列化机制,类似于XML但更小、更快... 目录一、Protocol Buffers简介1.1 什么是Protocol Buffers1.2 Pro

C#使用Spire.XLS快速生成多表格Excel文件

《C#使用Spire.XLS快速生成多表格Excel文件》在日常开发中,我们经常需要将业务数据导出为结构清晰的Excel文件,本文将手把手教你使用Spire.XLS这个强大的.NET组件,只需几行C#... 目录一、Spire.XLS核心优势清单1.1 性能碾压:从3秒到0.5秒的质变1.2 批量操作的优雅

MyBatis-Plus 与 Spring Boot 集成原理实战示例

《MyBatis-Plus与SpringBoot集成原理实战示例》MyBatis-Plus通过自动配置与核心组件集成SpringBoot实现零配置,提供分页、逻辑删除等插件化功能,增强MyBa... 目录 一、MyBATis-Plus 简介 二、集成方式(Spring Boot)1. 引入依赖 三、核心机制

C#和Unity中的中介者模式使用方式

《C#和Unity中的中介者模式使用方式》中介者模式通过中介者封装对象交互,降低耦合度,集中控制逻辑,适用于复杂系统组件交互场景,C#中可用事件、委托或MediatR实现,提升可维护性与灵活性... 目录C#中的中介者模式详解一、中介者模式的基本概念1. 定义2. 组成要素3. 模式结构二、中介者模式的特点

MySQL 数据库表操作完全指南:创建、读取、更新与删除实战

《MySQL数据库表操作完全指南:创建、读取、更新与删除实战》本文系统讲解MySQL表的增删查改(CURD)操作,涵盖创建、更新、查询、删除及插入查询结果,也是贯穿各类项目开发全流程的基础数据交互原... 目录mysql系列前言一、Create(创建)并插入数据1.1 单行数据 + 全列插入1.2 多行数据

C#中SortedSet的具体使用

《C#中SortedSet的具体使用》SortedSet是.NETFramework4.0引入的一个泛型集合类,它实现了一个自动排序的集合,内部使用红黑树数据结构来维护元素的有序性,下面就来介绍一下如... 目录基础概念主要特性创建和初始化基本创建方式自定义比较器基本操作添加和删除元素查询操作范围查询集合运