目录

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

GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:1 个月前 )
960b763e 3 个月前
8c391e04 6 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐