JSON格式转换

本文介绍了如何在C#中使用JSON进行序列化和反序列化操作,以`Classs`和`Student`类为例,并提到在`local.settings.json`中环境变量的设置需采用序列化字符串格式而非JSON格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. JSON 格式

实体类格式:

public class Student {
    public string name {get; set;}
    public int age {get; set;}
}
public class Classs {
    public string teacher {get; set;}
    public List<Student> students {get; set;}
}

JSON格式(格式化):

{
   "teacher": "xxxxx",
   "students": [
      {
         "name": "Rufus",
         "age": "1"
      },
      {
         "name": "Marty",
         "age": "2"
      }
   ]
}

JSON字符串(序列化)

"{\"teacher\":\"xxxxx\",\"students\":[{\"name\":\"Rufus\",\"age\":\"1\"},{\"name\":\"Marty\",\"age\":\"2\"}]}"

术语名称:

JSON格式化:就是将JSON数据转换成易于阅读的格式的过程,整体的阅读会更加美观易阅读。
JSON序列化:将一个对象或数据结构转换为JSON格式的字符串的过程.
JSON反序列化:将JSON格式的数据转换为程序中的对象或数据结构的过程.

应用:

namespace TestOfPractice {
    public class Program {
        public static void Main(string[] args) {
            string requestBodyStr = "{\t\"teacher\":\"xxxxx\",\t\"students\":[\t\t{\"name\":\"Rufus\",\"age\":\"1\"},\t\t{\"name\":\"Marty\",\"age\":\"2\"}\t]}";
            Classs request = JsonConvert.DeserializeObject<Classs>(requestBodyStr); // 反序列化
            Console.WriteLine(request);

            string s = JsonConvert.SerializeObject(request); // 序列化
            Console.WriteLine(s);
        }
    }

    public class Student {
        public string name {get; set;}
        public int age {get; set;}
    }
    public class Classs {
        public string teacher {get; set;}
        public List<Student> students {get; set;}

    }
}
/*
TestOfPractice.Classs
{"teacher":"xxxxx","students":[{"name":"Rufus","age":1},{"name":"Marty","age":2}]}
*/

1.1 JObject | JArray

  已经了解 JsonConvert 基类转化 json 数据格式之后,我们能否拥有更简洁的方法直接操作对应的 json 数据呢,在不借助自定义类的情况下直接对 json 数据本身的格式进行处理操作,直接生成利于数据传输过程当中的json数据呢?
  答案是有的. json 数据转化格式往往最外层对应的就是对象或者数组,系统提供了 JObject、JArray 来分别处理两种类型的 json数据.
  Jobject - 操作Json对象

	public static void Main(string[] args) {
	    JObject job = new JObject();
	
	    // 增添对象键值对
	    job.Add("name", "zhangsan");
	    job.Add("age", 16);
	    
	    // 转json格式
	    string json = job.ToString();
	    Console.WriteLine(json);
	
	    // 直接操作json
	    job["age"] = 17;
	}

  JArray - 操作Json数组

    public static void Main(string[] args) {
        string s = "[true, 2, null, \"123\"]";
        JArray jar = JArray.Parse(s);

        // 增、删、改
        jar.Add("345");
        jar.RemoveAt(0); // 索引删除
        jar[0] = false;

        Console.WriteLine(jar.ToString());
    }

1.2 JToken

  JToken是这些Json数据的基类,包括JObject、JArray、JValue、JProperty等. 提供更加通用的方法处理Json数据.
在这里插入图片描述

    public static void Main(string[] args) {
        string s = "[true, 2, null, \"123\"]";
        JArray jar = JArray.Parse(s);

        JToken jto = jar;
        foreach(var item in jto.Children()){
            Console.WriteLine(item);    
        }
    }

2. 细节

1. local.settings.json当中设置的一些环境变量键值对如果需要后期被获取使用,其格式必须为序列化的字符串样式不能继续按照JSON格式写,

{
  "Values": {
    "requestBodyStr": "{\t\"teacher\":\"xxxxx\",\t\"students\":[\t\t{\"name\":\"Rufus\",\"age\":\"1\"},\t\t{\"name\":\"Marty\",\"age\":\"2\"}\t]}"
  }
}
--  Environment.GetEnvironmentVariable("requestBodyStr");
-- 系统获取环境变量参数设置时其对应的值应该设置为序列化字符串的样式,不能按照Json数据格式写其JSon格式化
的数据.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

psudd

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

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

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

打赏作者

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

抵扣说明:

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

余额充值