当前位置:   article > 正文

C# 设置/解析JSON/获取JSON的值_c#json对象怎么取嵌套值

c#json对象怎么取嵌套值

目录

设置生成JSON字符串(序列化)

将JSON字符串转换为C#对象(反序列化)

实例


设置生成JSON字符串(序列化)

实体类

  1. class User
  2. {
  3. public string? username { get; set; }
  4. public string? sex { get; set; }
  5. public string? data { get; set; }
  6. }

测试代码

  1. using System.Reflection.Metadata;
  2. using System.Text;
  3. using System.Text.Encodings.Web;
  4. using System.Text.Json;
  5. using System.Text.Unicode;
  6. namespace learn
  7. {
  8. internal class Program
  9. {
  10. static void Main(string[] args)
  11. {
  12. //设置Json字符集编码配置(不设置中文会出问题!!!!)
  13. JsonSerializerOptions setting = new JsonSerializerOptions();
  14. setting.Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping;
  15. //创建User对象
  16. User user = new User {username="张丹",sex="男",data="NB"};
  17. //将对象转换为JSON字符串(序列化)
  18. String jsonString=JsonSerializer.Serialize(user, setting);
  19. Console.WriteLine(jsonString);
  20. }
  21. }
  22. }

输出

 

将JSON字符串转换为C#对象(反序列化)

实体类

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace learn
  7. {
  8. class User
  9. {
  10. public string? username { get; set; }
  11. public string? sex { get; set; }
  12. public User? data { get; set; }
  13. }
  14. }

 测试代码

  1. using Newtonsoft.Json;
  2. using Newtonsoft.Json.Linq;
  3. using System.Reflection.Metadata;
  4. using System.Reflection.PortableExecutable;
  5. using System.Text;
  6. using System.Text.Encodings.Web;
  7. using System.Text.Json;
  8. using System.Text.Unicode;
  9. using JsonSerializer = System.Text.Json.JsonSerializer;
  10. namespace learn
  11. {
  12. internal class Program
  13. {
  14. static void Main(string[] args)
  15. {
  16. //设置Json字符集编码配置(不设置中文会出问题!!!!)
  17. JsonSerializerOptions setting = new JsonSerializerOptions();
  18. setting.Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping;
  19. //1 不嵌套的情况
  20. //创建User对象
  21. User user = new User {username="张丹",sex="男"};
  22. //序列化
  23. //将对象转换为JSON字符串
  24. String jsonString =JsonSerializer.Serialize(user, setting);
  25. Console.WriteLine("不嵌套的情况下,JSON字符串为:"+jsonString);
  26. //反序列化
  27. JObject o = (JObject)JToken.Parse(jsonString);
  28. Console.WriteLine("不嵌套的情况,获取User对象中的username为:" + o["username"]);
  29. //2 嵌套的情况
  30. //创建User对象
  31. User user2 = new User { username = "张丹", sex = "男" ,data=new User {
  32. username="我是张丹的女儿",sex="女"} };
  33. //序列化
  34. //将对象转换为JSON字符串
  35. String jsonString2 = JsonSerializer.Serialize(user2, setting);
  36. Console.WriteLine("嵌套的情况下,JSON字符串为:" + jsonString2);
  37. //反序列化
  38. JObject o2 = (JObject)JToken.Parse(jsonString2);
  39. Console.WriteLine(o2["username"]);
  40. Console.WriteLine("data为:"+o2["data"]);
  41. Console.WriteLine("嵌套的情况下,获取User里面的data里面的username为:" + o2["data"]["username"]);
  42. }
  43. }
  44. }

截图

 

实例

假如我们现在有一个JSON文档我们需要获取JSON文档里面的特定值。我们需要怎么做呢?请看下面这张图

用红色笔圈住的是我们的目标文件以及文件路径。

  1. using (StreamReader reader = File.OpenText("你的文件路径"))
  2. {
  3. //微软有个Newtonsoft.Json封装类十分好用,里面的JToken直接实现linq查询。
  4. //将json字符串解析时直接使用JToken比较好用
  5. JObject o = (JObject)JToken.ReadFrom(new JsonTextReader(reader));
  6. Console.WriteLine((o["ConnectionStrings"])["WuYeSystemContext"]);
  7. }
  8. Console.ReadKey();

 然后这个文件就是我们的JSON文档,这里举一个例子如何获取嵌套的值!

 

 然后这个红色框框里面是我们想要获取的嵌套值!!!

 通过仔细观察发现

 红色框框里的文档被两个大括号所包围所以是一个两层嵌套所以我们先获取第1层嵌套的值,

o["ConnectionStrings"]

获取完毕之后我们再获取第2层嵌套的值

(o["ConnectionStrings"])["WuYeSystemContext"]

  OK大功告成控制台可以输出测试一下!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/861744
推荐阅读
相关标签
  

闽ICP备14008679号