首页 > 编程语言 >C#序列化和反序列化JSON的两种方法(转载)(三)

C#序列化和反序列化JSON的两种方法(转载)(三)

时间:2023-10-24 10:48:55浏览次数:47  
标签:set Console string get C# JSON using 序列化 public

  C#有两种方式序列化和反序列化JSON字符串:   第一种是System.Web.Script.Serialization下的JavaScriptSerializer,原生自带的这种方法需要与类绑定,不方便。   第二种是Json.NET第三方库方法,既可以与对象绑定,也可以反序列化为更通用的JObject,方便易用,推荐。 一:  JavaScriptSerializer   

using System;
using System.Collections.Generic;
using System.Web.Script.Serialization;

namespace ConsoleAppTest
{
    public class Studet
    {
        public string name { get; set; }
        public int age { get; set; }
        public string idCard { get; set; }
        public DateTime birthday { get; set; }
        public List<Hobby> hobbys { get; set; }
    }
    public class Hobby
    {
        public int sort { get; set; }
        public string desc { get; set; }
    }
    class Program
    {
        static void Main(string[] args)
        {
            string json = @"{
              ""name"": ""张三"",
              ""age"": 20,
              ""idCard"": ""123456789"",
              ""birthday"": ""2022-10-21 00:00:00"",
              ""hobbys"": [
                {
                  ""sort"": 1,
                  ""desc"": ""写字""
                },
                {
                  ""sort"": 2,
                  ""desc"": ""游泳""
                }
              ]
            }";
            JavaScriptSerializer jss = new JavaScriptSerializer();

            // 反序列化:解析JSON字符串
            Studet student = jss.Deserialize<Studet>(json);
            Console.WriteLine(student.birthday);

            // 序列化:对象转JSON字符串
            string resultJson = jss.Serialize(student);
            Console.WriteLine(resultJson);
            Console.ReadKey();
        }
    }
}

 二:   Json.NET

using System;
using System.Collections.Generic;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace ConsoleAppTest
{
    public class Studet
    {
        public string name { get; set; }
        public int age { get; set; }
        public string idCard { get; set; }
        public DateTime birthday { get; set; }
        public List<Hobby> hobbys { get; set; }
    }
    public class Hobby
    {
        public int sort { get; set; }
        public string desc { get; set; }
    }
    class Program
    {
        static void Main(string[] args)
        {
            string json = @"{
              ""name"": ""张三"",
              ""age"": 20,
              ""idCard"": ""123456789"",
              ""birthday"": ""2022-10-21 00:00:00"",
              ""hobbys"": [
                {
                  ""sort"": 1,
                  ""desc"": ""写字""
                },
                {
                  ""sort"": 2,
                  ""desc"": ""游泳""
                }
              ]
            }";
            // 反序列化JSON字符串到对象
            Studet student = JsonConvert.DeserializeObject<Studet>(json);
            Console.WriteLine(student.birthday);

            // 序列化对象到JSON字符串
            string resultJson = JsonConvert.SerializeObject(student);
            Console.WriteLine(resultJson);

            Console.ReadKey();
        }
    }
}

 三:JSON字符串和JObject之间相互转换:JObject.Parse

using System;
using Newtonsoft.Json.Linq;

namespace ConsoleAppTest
{
    class Program
    {
        static void Main(string[] args)
        {
            string json = @"{
              ""name"": ""张三"",
              ""age"": 20,
              ""idCard"": ""123456789"",
              ""birthday"": ""2022-10-21 00:00:00"",
              ""hobbys"": [
                {
                  ""sort"": 1,
                  ""desc"": ""写字""
                },
                {
                  ""sort"": 2,
                  ""desc"": ""游泳""
                }
              ]
            }";

            JObject jobj = JObject.Parse(json);
            Console.WriteLine(jobj["birthday"].ToString());

            JObject jObject = new JObject();
            jObject["name"] = "张三";
            jObject["birthday"] = new DateTime(2022, 10, 21, 16, 11, 9);
            Console.WriteLine(jObject);
            Console.ReadKey();
        }
    }
}

 四:JSON对象数组的四种方法
        对于类似于[{},{}]这种对象数组的字符串有四种方法:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Web.Script.Serialization;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace ConsoleAppTest
{
    public class Studet
    {
        public string name { get; set; }
    }
    class Program
    {
        static void Main(string[] args)
        {
            string json = @"[{""name"": ""张三""},{""name"": ""李四""}, {""name"": ""王五""}]";

            // 第一种:DataTable
            DataTable dt = JsonConvert.DeserializeObject<DataTable>(json);
            Console.WriteLine(dt.Rows[0][0]);

            // 第二种:JavaScriptSerializer
            JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
            ArrayList arrayList = javaScriptSerializer.Deserialize<ArrayList>(json);
            Dictionary<string, object> dic = (Dictionary<string, object>)arrayList[0];
            Console.WriteLine(dic["name"]);

                // 第三种:JArray
                JArray jArray = JArray.Parse(json);
            Console.WriteLine(jArray[0]["name"]);

            // 第四种:反序列化到对象 DeserializeObject
            List<Studet> list = JsonConvert.DeserializeObject<List<Studet>>(json);
            Console.WriteLine(list[0].name);
            Console.ReadKey();
        }
    }
}

原文地址:https://blog.csdn.net/lilongsy/article/details/127445346

 

标签:set,Console,string,get,C#,JSON,using,序列化,public
From: https://www.cnblogs.com/Peretsoft/p/17784174.html

相关文章

  • TypeScript入门到精通——TypeScript类型系统基础——对象类型
    对象类型 在JavaScript中存在这样一种说法,那就是"一切皆为对象"。有这种说法是因为JavaScript中绝大多数值都可以使用对象来表示。例如:函数、数组和对象字面量本质上都是对象。对于原始数据类型、如String类型,JavaScript也提供了相应的构造函数来创建能够表示原始值的......
  • JWT Tool:针对 JSON Web Tokens 的测试工具题解JWT cracking
    什么是JWT?JWT是JSONWebToken的缩写,它是一串带有声明信息的字符串,由服务端使用加密算法对信息签名,以保证其完整性和不可伪造性。Token里可以包含所有必要的信息,这样服务端就无需保存任何关于用户或会话的信息了。JWT可用于身份认证,会话状态维持以及信息交换等任务。JWT由三部分......
  • uniapp引入H5调试vConsole
    在真机环境下调试移动端H5的时候,无法像浏览器一样打开控制台进行console调试,那么我们可以在前端项目中引入vconsole,便于我们在真机环境下调试移动端H5项目vConsole是一个轻量、可拓展、针对手机网页的前端开发者调试面板。详细文档可查看:https://gitee.com/mirrors/vConsole/功......
  • springcloud-gateWay
    基础模板spring:cloud:gateway:routes: -id:gulimall-search#别重复就行 uri:lb://gulimall-search#对应微服务的applicationName predicates: -Path=/api/search/**predicates的概念每一个route对应一个--->RouteDefi......
  • 项目中JSON序列化循环引用的问题
    已经很多次碰到循环引用的问题了之前碰到是在Spring中初始化过程中component之间存在循环引用怎么办 这次碰到,是在JSON序列话的时候碰到了循环引用导致的问题问题原因:在结构体中,为了实现方便数据的引用,在数据结构中加入了Parent节点,由于存在child节点,在生成json对象的时候就......
  • CRM系统如何提高客户保留率?提高CRM客户关系
    提高企业的客户保留率与CRM客户关系管理密切相关。CRM客户管理系统是企业用来进一步培养与客户关系的技术和技巧的结合。要与您的客户建立并保持这种联系,您可以参考正文的几个策略。下面来说说,CRM系统如何提高客户保留率?提高客户保留率的几个策略1、优化购买流程良好的购物体......
  • 如何衡量CRM投资回报率?CRM系统如何提升投资回报率?
     很多企业完成CRM客户管理系统的安装后没有从中获益,其实道理很简单,企业购买使用CRM的过程,可以视作为一次投资。既然是投资,就需要去计算ROI,明确这场投资的回报率。那么,如何衡量CRM投资回报率?CRM系统如何提升投资回报率? 如何衡量CRM投资回报率用数字来反馈CRM的投资回报率会......
  • spring-cloud 配置管理
    作用:实现配置热更新实现网关配置热部署配置模板spring:datasource:driver-class-name:com.mysql.cj.jdbc.Driverurl:jdbc:mysql://${db.gulimall.host:192.168.229.128}:${db.gulimall.port:3306}/{$db.gulimall.database:my_db}username:${db.gulima......
  • Chromium 消息循环和线程池详解
    Chromium中的多线程机制由base库提供,要理解Chromium中的多线程机制,首先要理解的概念就是 base::MessageLoop 和 base::TaskScheduler ,它们两个是Chromium多线程的基础1. MessageLoop详解base::MessageLoop 代表消息循环,它不会主动创建新的线程,默认情况下它使用当前......
  • CRM系统:客户保留是什么?
     任何一家企业,都需要去思考在销售过程中有多少客户是有效的?又有多少客户是可以保留的?初具规模的企业通过CRM客户管理系统只一味的开发新客户,而忽略客户保留,反而会造成资源的浪费。那么我们常说的客户保留是什么意思?什么是客户保留?简单点说,就是“回头客”,客户保留就是要让现有......