赞
踩
目录
实体类
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); } } }输出
实体类
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大功告成控制台可以输出测试一下!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。