JSON序列化与反序列化

news2024/11/21 2:32:21

目录

JSON序列化

查看JSON文件,设置数据模板类

​编辑

Newtonsoft.Json下载

运行结果展示

JSON反序列化 


序列化是将对象或数据结构转换为可以存储或传输的格式(如JSON字符串)的过程,而反序列化则是将这个格式的数据转换回原始的对象或数据结构的过程。

序列化是由对象转成字符串(如JSON字符串)

反序列化是由字符串(如JSON字符串)封装成对象。

JSON序列化

查看JSON文件,设置数据模板类

我初次见到数据模板类时有点生疏,其实就是将JSON文件里面的属性提取出来作为一个类中的属性。

问:所谓的数据模板类就是将JSON里面的属性提取出来,做成一个类对吧,比如说这个电池的属性,提取共同的属性后 生成Battery类

答:是的,你完全正确。数据模板类(也称为数据模型类或DTO - Data Transfer Object)的目的是为了将JSON或其他数据源中的数据映射到C#对象,以便在程序中更方便地处理这些数据。在你的例子中,你从JSON中提取了电池的各个属性(如CodeSupplyTimeSupplyWeight等),并将它们组织成一个名为Battery的类。这样做的好处是,你可以使用这个类来创建电池对象,这些对象可以包含从JSON中解析出来的数据,并且你可以使用C#的所有面向对象编程的特性(如方法、属性、继承等)来操作这些数据。一旦你有了这个Battery类,你就可以进一步定义一个包含Battery对象列表的类(如BatteryList),以便处理多个电池对象。这样,你就可以将整个JSON结构映射到C#的类结构中,使数据处理变得更加简单和直观。

问:这里不是需要一个Battery类吗,那我是右键解决方案添加类,还是右击项目名添加类呢 ?

答:在Visual Studio中,无论是右键点击解决方案(Solution)还是项目名(Project Name)来添加类,最终的效果都是一样的,因为类文件都会被添加到具体的项目中。不过,一般来说,我们更习惯于直接右键点击项目名来添加类,因为这样做可以确保类文件被添加到你想要的工作范围(即具体的项目)内。

以下是添加类的步骤:

  1. 在Visual Studio的“解决方案资源管理器”(Solution Explorer)中,找到你的项目名(通常是一个文件夹图标)。

  2. 右键点击项目名,选择“添加” -> “类”(Add -> Class)。

  3. 在弹出的对话框中,输入类的名称(比如“Battery”),然后点击“添加”(Add)。

现在,你应该会看到一个名为“Battery.cs”的新文件出现在你的项目中,你可以在这个文件中定义你的Battery类。

同样地,如果你想要添加一个包含多个Battery对象的类(比如BatteryList),你可以再次右键点击项目名,选择“添加” -> “类”,然后输入类名“BatteryList”。

在C#中,从C# 8.0开始,引入了可空引用类型(Nullable reference types)的特性,它允许你指定引用类型(如string、类、接口等)是否可以为null。默认情况下,如果不显式指定,引用类型在C# 8.0及更高版本中被视为不可为null(non-nullable),这意味着编译器会假设这些类型的变量在被使用之前已经被赋予了非null的值。

对于string类型,由于它是一个引用类型,你可以在类定义中显式地指定它是否可以为null。如果你想让string属性可以为null,你需要在属性声明后面添加?后缀。

Newtonsoft.Json下载

JSON序列化需要用到的Newtonsoft.Json

  1. 命名空间问题BatteryList 类可能定义在一个与 Program.cs 不同的命名空间中。如果 BatteryList 类定义在 MyNamespace 命名空间中,而 Program.cs 没有使用 using MyNamespace; 指令,那么编译器就找不到 BatteryList 类型。

using Newtonsoft.Json;  
  
class Program  
{  
    static void Main()  
    {  
        // 实例化数据对象  
        var batteryList = new BatteryList  
        {  
            Batterys = new List<Battery>  
            {  
                new Battery  
                {  
                     //JSON中对应的数据
                },  
                new Battery  
                {  
                    //JSON中对应的数据
                }  
                // 可以继续添加更多Battery对象...  
            }  
        };  
  
        // 序列化成JSON字符串  
        string json = JsonConvert.SerializeObject(batteryList, Formatting.Indented); // 使用Formatting.Indented可以使输出的JSON格式更易于阅读  
  
        // 输出JSON字符串到控制台或保存到文件等...  
        Console.WriteLine(json);  
    }  
}

运行结果展示

JSON反序列化 

using Newtonsoft.Json;  
using System;  
using System.Collections.Generic;  
  
// ... 之前的类定义(Battery和BatteryList)保持不变 ...  
  
class Program  
{  
    static void Main()  
    {  
        // 假设我们有一个JSON字符串  
        string json = @"  
        {  
            ""Batterys"": [  
                {  
                    //JSON文件中的数据
                },  
                {  
                    //JSON文件中的数据
                }  
            ]  
        }";  
  
        // 反序列化JSON字符串到BatteryList对象  
        BatteryList batteryList = JsonConvert.DeserializeObject<BatteryList>(json);  
  
        // 现在你可以访问batteryList对象及其Batterys属性了  
        foreach (var battery in batteryList.Batterys)  
        {  
            Console.WriteLine($"Code: {battery.Code}, Result: {battery.Result}, IsDone: {battery.IsDone}");  
        }  
    }  
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1855029.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python3GUI--ktv点歌软件By:PyQt5(附下载地址)

文章目录 一&#xff0e;前言二&#xff0e;展示1.启动2.搜索2.服务1.首页2.天气预报3.酒水饮料4.酒水饮料2 3.服务4.灯光5.调音6.排行榜7.分类点歌9.歌手点歌10.歌手个人页 三&#xff0e;心得体会1.关于代码2.关于设计3.关于打包 四&#xff0e;总结 文件大小&#xff1a;33.…

APP启动流程解析

简单概括启动微信的流程就是&#xff1a; 1.Launcher通知AMS 要启动微信了&#xff0c;并且告诉AMS要启动的是哪个页面也就是首页是哪个页面 2.AMS收到消息告诉Launcher知道了&#xff0c;并且把要启动的页面记下来 3.Launcher进入Paused状态&#xff0c;告诉AMS&#xff0c…

[数据概念]一分钟弄懂数据治理

“ 数据治理是数据资产化的起点。” 数据资产化的趋势正愈演愈烈。然而&#xff0c;我们必须清醒地认识到&#xff0c;资产化的前提条件是拥有实际的数据资产。那么&#xff0c;这些宝贵的数据资产究竟源自何处呢&#xff1f;答案显而易见&#xff0c;它们源自企业日常运营中积…

车载以太网权威指南阅读笔记

总体思路&#xff1a; 要基于车载以太网做出相应的机器人以太网神经中枢&#xff0c;需要按照以下步骤&#xff1a; 了解车载以太网&#xff0c;包括但不限于 车载以太网是如何基于汽车需求定义的车载以太网的工作模式车载以太网工作所需要的硬件车载以太网中的数据交互模式 …

Chrome插件: Octotree让你GitHub代码浏览速度飙升

在GitHub上浏览和管理项目代码时&#xff0c;您是否曾为复杂的目录结构感到困惑&#xff1f;如果有一种工具能够让您轻松浏览项目的文件和目录&#xff0c;会不会大大提升您的工作效率&#xff1f;这正是Octotree浏览器插件所能做到的。 不过说实话&#xff0c;GitHub自带的代码…

WordPress视频主题Qinmei 2.0

WordPress视频主题Qinmei 2.0&#xff0c;简单漂亮的WP视频站源码 主题功能 可以根据豆瓣ID直接获取到其他详细信息&#xff0c;省去慢慢填写的痛苦&#xff1b;播放器支持直链&#xff0c;解析&#xff0c;m3u8格式&#xff0c;同时解析可匹配正则自动更改&#xff1b;新增动…

【建设方案】基于gis地理信息的智慧巡检解决方案(源文件word)

传统的巡检采取人工记录的方式&#xff0c;该工作模式在生产中存在很大弊端&#xff0c;可能造成巡检不到位、操作失误、观察不仔细、历史问题难以追溯等现象&#xff0c;使得巡检数据不准确&#xff0c;设备故障隐患得不到及时发现和处理。因此建立一套完善的巡检管理系统是企…

Flutter TIM 项目配置

目录 1. 设计说明 2. 参考资料索引 Flutter SDK 服务端 Rest API 腾讯后台 其他 3. TIM 整体架构 第一部分&#xff1a;APP 端 第二部分&#xff1a;腾讯服务器 第三部分&#xff1a;三方服务 第四部分&#xff1a;你自己的服务器 4. TIM SDK 集成 TUIK 含 UI 集成…

pywebview打包本地的html

51.安装 pip install pywebview 2.新建start.py import webview import timeclass API:def say_hello(self, name):time.sleep(2) # 模拟一个耗时操作return fHello, {name}!def main():api API()webview.create_window(pywebview Example, index.html, js_apiapi)webview.…

构建家庭NAS之二:TrueNAS Scale规划、安装与配置

首先声明一下&#xff0c;我用的版本是TrueNAS SCALE 24.04.1.1&#xff08;目前的最新版本&#xff09;&#xff0c;其它版本的界面和操作方式或有不同。我安装使用过程中网上的一些教程里的操作方式和这个版本不一样&#xff0c;造成了一些困扰。 TrueNAS SCALE的最低硬件需…

DC/AC电源模块:提高太阳能发电系统的效率和稳定性

BOSHIDA DC/AC电源模块&#xff1a;提高太阳能发电系统的效率和稳定性 DC/AC电源模块是太阳能发电系统中的一个重要组成部分&#xff0c;其作用是将太阳能转化为交流电以供家庭或工业使用。它可以提高太阳能发电系统的效率和稳定性&#xff0c;使得太阳能发电系统更加可靠和持…

Pikachu靶场--CRSF

借鉴参考 CSRF跨站请求伪造&#xff08;CTF教程&#xff0c;Web安全渗透入门&#xff09;_bilibili pikachu靶场CSRF之TOKEN绕过_csrf token绕过的原理-CSDN博客 CSRF(get) 发现需要登录 查看提示&#xff0c;获取username和password 选择一个用户进行登录 选择修改个人信息 …

Applied Spatial Statistics(七):Python 中的空间回归

Applied Spatial Statistics&#xff08;七&#xff09;&#xff1a;Python 中的空间回归 本笔记本演示了如何使用 pysal 的 spreg 库拟合空间滞后模型和空间误差模型。 OLS空间误差模型空间滞后模型三种模型的比较探索滞后模型中的直接和间接影响 import numpy as np impor…

Vue.js 自定义组件的三种用法

1.创建项目 创建项目,你可以参考我以前的博文,这里省略了 项目的目录结构如下: 接着,我们在 src/components 目录下创建一个自定义的组件 SplashHello.vue,示例代码如下所示: <template><div><p>{{ title }}</p><p>{{ message }}</p&…

深入探索 Nuxt3 Composables:掌握目录架构与内置API的高效应用

title: 深入探索 Nuxt3 Composables&#xff1a;掌握目录架构与内置API的高效应用 date: 2024/6/23 updated: 2024/6/23 author: cmdragon excerpt: 摘要&#xff1a;“本文深入探讨了Nuxt3 Composables&#xff0c;重点介绍了其目录架构和内置API的高效应用。通过学习本文&…

Leetcode 2713. 矩阵中严格递增的单元格数(DFS DP)

Leetcode 2713. 矩阵中严格递增的单元格数 DFS 容易想到&#xff0c;枚举每个点作为起点&#xff0c;向同行同列的可跳跃点dfs&#xff0c;维护全局变量记录可达的最远距离 超时&#xff0c;通过样例193 / 566 class Solution {int res 0;public void dfs(int[][] mat, in…

网络编程之XDP、TC和IO_URING以及DPDK

一、网络编程常见的技术 在前面已经分析过了XDP、TC和eBPF。也基本把三者间的关系理清了&#xff0c;但现在又有一个疑惑涌了上来。在前面提到过的IO_URING和DPDK与这些技术有什么关系呢&#xff1f;其实只要认真的看过分析文章可能大家心里都已经基本清楚了。 正如在前面不断…

视频格式怎么转换?9 个免费视频转换工具

前 9 款免费视频转换器有哪些&#xff1f;在此视频转换器评论中&#xff0c;我们收集了一些有用的提示并列出了顶级免费视频转换器软件&#xff0c;还找出了适合所有级别&#xff08;从初学者到专家&#xff09;的最佳免费视频转换器。 1. Geekersoft免费在线视频转换 最好的免…

【HTTPS云证书部署】SpingBoot部署证书

这里以华为云证书为例。 1. 下载证书 2. 解压 3. 选择.top_Tomcat复制到SpringBoot的Resource/source下 4. 在.properties文件中进行配置 修改key-store和key-store-password

vue3源码(五)ref、toRef、toRefs、proxyRefs

1.ref 功能 ref与reactive功能类似,都是将数据变为响应式&#xff0c;ref通常用来定义基本类型数据&#xff0c;如字符串、数字、布尔值等。而reactive用来定义对象&#xff08;或数组&#xff09;类型数据。虽然ref也可以用来定义对象或数组类型的数据&#xff0c;但内部会通…