C# 设置/解析JSON/获取JSON的值
json
适用于现代 C++ 的 JSON。
项目地址:https://gitcode.com/gh_mirrors/js/json
免费下载资源
·
目录
设置生成JSON字符串(序列化)
实体类
class User { public string? username { get; set; } public string? sex { get; set; } public string? data { get; set; } }
测试代码
using System.Reflection.Metadata; using System.Text; using System.Text.Encodings.Web; using System.Text.Json; using System.Text.Unicode; namespace learn { internal class Program { static void Main(string[] args) { //设置Json字符集编码配置(不设置中文会出问题!!!!) JsonSerializerOptions setting = new JsonSerializerOptions(); setting.Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping; //创建User对象 User user = new User {username="张丹",sex="男",data="NB"}; //将对象转换为JSON字符串(序列化) String jsonString=JsonSerializer.Serialize(user, setting); Console.WriteLine(jsonString); } } }
输出
将JSON字符串转换为C#对象(反序列化)
实体类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace learn { class User { public string? username { get; set; } public string? sex { get; set; } public User? data { get; set; } } }
测试代码
using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System.Reflection.Metadata; using System.Reflection.PortableExecutable; using System.Text; using System.Text.Encodings.Web; using System.Text.Json; using System.Text.Unicode; using JsonSerializer = System.Text.Json.JsonSerializer; namespace learn { internal class Program { static void Main(string[] args) { //设置Json字符集编码配置(不设置中文会出问题!!!!) JsonSerializerOptions setting = new JsonSerializerOptions(); setting.Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping; //1 不嵌套的情况 //创建User对象 User user = new User {username="张丹",sex="男"}; //序列化 //将对象转换为JSON字符串 String jsonString =JsonSerializer.Serialize(user, setting); Console.WriteLine("不嵌套的情况下,JSON字符串为:"+jsonString); //反序列化 JObject o = (JObject)JToken.Parse(jsonString); Console.WriteLine("不嵌套的情况,获取User对象中的username为:" + o["username"]); //2 嵌套的情况 //创建User对象 User user2 = new User { username = "张丹", sex = "男" ,data=new User { username="我是张丹的女儿",sex="女"} }; //序列化 //将对象转换为JSON字符串 String jsonString2 = JsonSerializer.Serialize(user2, setting); Console.WriteLine("嵌套的情况下,JSON字符串为:" + jsonString2); //反序列化 JObject o2 = (JObject)JToken.Parse(jsonString2); Console.WriteLine(o2["username"]); Console.WriteLine("data为:"+o2["data"]); Console.WriteLine("嵌套的情况下,获取User里面的data里面的username为:" + o2["data"]["username"]); } } }
截图
实例
假如我们现在有一个JSON文档我们需要获取JSON文档里面的特定值。我们需要怎么做呢?请看下面这张图
用红色笔圈住的是我们的目标文件以及文件路径。
using (StreamReader reader = File.OpenText("你的文件路径"))
{
//微软有个Newtonsoft.Json封装类十分好用,里面的JToken直接实现linq查询。
//将json字符串解析时直接使用JToken比较好用
JObject o = (JObject)JToken.ReadFrom(new JsonTextReader(reader));
Console.WriteLine((o["ConnectionStrings"])["WuYeSystemContext"]);
}
Console.ReadKey();
然后这个文件就是我们的JSON文档,这里举一个例子如何获取嵌套的值!
然后这个红色框框里面是我们想要获取的嵌套值!!!
通过仔细观察发现
红色框框里的文档被两个大括号所包围所以是一个两层嵌套,所以我们先获取第1层嵌套的值,
o["ConnectionStrings"]
获取完毕之后我们再获取第2层嵌套的值
(o["ConnectionStrings"])["WuYeSystemContext"]
OK大功告成控制台可以输出测试一下!
GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:1 个月前 )
960b763e
3 个月前
8c391e04
6 个月前
更多推荐
已为社区贡献9条内容
所有评论(0)