• C# JSON转为实体类和List,以及结合使用


    引用

    using Newtonsoft.Json;
    
    using Newtonsoft.Json.Linq;
    
    • 1
    • 2
    • 3

    JSON转实体类

    public class Person
    {
    	public string Name { get; set; }
    	public int Age { get; set; }
    	public string Gender { get; set; }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    string jsonStr = "{\"name\": \"Tom\", \"age\": 20, \"gender\": \"male\"}";
    Person person = JsonConvert.DeserializeObject<Person>(jsonStr);
    
    • 1
    • 2

    JSON转List

    方法一

    json

    {
       "data": [
             {
                "Id":"0",
                "Username":"Vreeswijk",
                "ProfilePicture":"media/user/0.png"
             },
             {
                "Id":"1",
                "Username":"Mony",
                "ProfilePicture":"media/user/12.png"
             }
          ]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    实现

    JObject obj = JObject.Parse(json);
    
    //Shou是于json中数组一个元素所对应的类
    List<Shou> root = JsonConvert.DeserializeObject<List<Shou>>(obj["data"].ToString());
    
    • 1
    • 2
    • 3
    • 4

    方法二

    json

    {
       "user":{
          [
             {
                "Id":"0",
                "Username":"Vreeswijk",
                "ProfilePicture":"media/user/0.png"
             }
          ]
       },
       "token":{
          [
             {
                "access_token":"myToken1",
                "refresh_token":"myToken2",
                "expires_in":3600,
                "expires_on":1577363756
             }
          ]
       }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    两个类

    public class Token
    {
        public string access_token { get; set; }
        public string refresh_token { get; set; }
        public int expire_in { get; set; }
        public int expire_on { get; set; }
    	//省略了构造方法
    }
    
    public class User
    {
        public int Id { get; set; }
        public string Username { get; set; }
        public string Password { get; set; }
        public string ProfilePicture { get; set; }
    	//省略了构造方法
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    实现

    var jObject = JObject.Parse(json);
    var userPropery = jObject["user"] as JArray;
    List<User> userList= new List<User>();
    
    foreach (var property in userPropery )
    {
        var propertyList = JsonConvert.DeserializeObject<List<user>>(property.ToString());
    	//List集合中的AddRange方法和Add方法的不同之处在于,Add方法为在集合末尾添加单个元素对象,而AddRange方法可以为添加整个目标list集合。
        userList.AddRange(propertyList);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    结合使用

    json

    {
       "number": 1,
       "day": "星期九",
       "user":{
          [
             {
                "Id":"0",
                "Username":"Vreeswijk",
                "ProfilePicture":"media/user/0.png"
             }
          ]
       },
       "token":{
           "access_token":"myToken1",
           "refresh_token":"myToken2",
           "expires_in":3600,
           "expires_on":1577363756
       }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    两个类

    public class Token
    {
        public string access_token { get; set; }
        public string refresh_token { get; set; }
        public int expire_in { get; set; }
        public int expire_on { get; set; }
    	//省略了构造方法
    }
    
    public class User
    {
        public int Id { get; set; }
        public string Username { get; set; }
        public string Password { get; set; }
        public string ProfilePicture { get; set; }
    	//省略了构造方法
    }
    
    public class Data
    {
        public int number { get; set; }
        public string day { get; set; }
    	public List<User> userList { get; set; }
        public Token token { get; set; }
    	//省略了构造方法
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    实现

    var jObject = JObject.Parse(json);
    
    List<User> userList = JsonConvert.DeserializeObject<List<Shou>>(jObject["data"].ToString());
    Token token = JsonConvert.DeserializeObject<Token>(jObject["token"]);
    int number = int.Parse(jObject["number"]);
    string day = jObject["day"].ToString();
    
    Data data = new Data(number,day,userList,token);
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  • 相关阅读:
    【STM32 PWM输出+串口调整PWM周期和占空比】
    通过docker-compose部署elk日志系统,并使用springboot整合
    聊聊JedisFactory
    性能优化 之 温度与电量
    Macbook使用GitLab的简单终端命令操作记录
    【C++】传递‘类非静态成员函数’用作回调函数
    聊聊秒杀系统的设计(三)
    iptables防火墙
    导航流程:从输入URL到页面展示,这中间发生了什么?
    FutureTask和CompletableFuture的模拟使用
  • 原文地址:https://blog.csdn.net/munangs/article/details/133950243