C# 设置/解析JSON/获取JSON的值

目录

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

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

实例


设置生成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大功告成控制台可以输出测试一下!

  • 6
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
C#解析JSON数据可以使用Newtonsoft.Json库。这个库可以将JSON数据转换成.NET对象,或者将.NET对象转换成JSON数据。 以下是一个例子,展示如何解析JSON数据并获取其中的: ```csharp using Newtonsoft.Json.Linq; // json是一个包含JSON数据的字符串 string json = "{ \"name\": \"John\", \"age\": 30 }"; // 将JSON数据转换成JObject对象 JObject obj = JObject.Parse(json); // 从JObject对象获取 string name = (string)obj["name"]; int age = (int)obj["age"]; ``` 首先,使用JObject.Parse方法将JSON数据转换成JObject对象。然后,使用索引器访问对象的属性并强制转换为需要的类型。 当然,如果你知道JSON数据结构的具体格式,还可以使用反序列化来将JSON数据转换成.NET对象。这种方法更加方便,因为你可以直接使用.NET对象的属性和方法来访问数据。 以下是一个例子,展示如何使用反序列化来解析JSON数据: ```csharp using Newtonsoft.Json; // 定义一个.NET类来表示JSON数据的结构 public class Person { public string Name { get; set; } public int Age { get; set; } } // json是一个包含JSON数据的字符串 string json = "{ \"name\": \"John\", \"age\": 30 }"; // 将JSON数据反序列化成Person对象 Person person = JsonConvert.DeserializeObject<Person>(json); // 访问Person对象的属性 string name = person.Name; int age = person.Age; ``` 这个例子中,我们定义了一个Person类来表示JSON数据的结构。然后,使用JsonConvert.DeserializeObject方法将JSON数据反序列化成Person对象。最后,通过访问Person对象的属性来获取数据。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桂亭亭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值