当前位置: 首页 > article >正文

C#中的序列化和反序列化

序列化是指将对象转换为可存储或传输的格式,例如将对象转换为JSON字符串或字节流。反序列化则是将存储或传输的数据转换回对象的过程。这两个过程在数据持久化、数据交换以及与外部系统的通信中非常常见

把对象转换成josn字符串格式    这个过程就是序列化
josn字符串: 就是拥有固定格式的字符串
{ "name": "张三", "age": 25, "isStudent": true }

步骤:

1.在"引用"上右键

2.添加Nuget程序包

3.搜索"json"

4.点击下载"Newtonsoft.json"

5.在项目using  Newtonsoft.json

先声明两个类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 序列反序列.Models
{
    [Serializable]//表示这个类可以序列化
    internal class User
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Email { get; set; }
        public string Password { get; set; }
    }
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 序列反序列.Models
{
    internal class Product
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public float Price { get; set; }
        public User SaleUser { get; set; }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using 序列反序列.Models;
using Newtonsoft.Json;

namespace 序列反序列
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        string s=string.Empty;
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            User user = new User() { Id = 1 , Name = "小张" ,Email="163.com",Password="123566"};
            s=JsonConvert.SerializeObject(user);
            Console.WriteLine(s);
            Console.WriteLine("这上面是序列化的");
        }
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            if (!string.IsNullOrWhiteSpace(s))
            {
                User newUser = JsonConvert.DeserializeObject<User>(s);
                Console.WriteLine(newUser.Name);
            }
            else
            {
                Console.WriteLine("先序列化");
            }
        }
    }
}

序列化

 Console.ForegroundColor = ConsoleColor.Red;
 User user = new User() { Id = 1 , Name = "小张" ,Email="163.com",Password="123566"};
 s=JsonConvert.SerializeObject(user);
 Console.WriteLine(s);
 Console.WriteLine("这上面是序列化的");

反序列化

  if (!string.IsNullOrWhiteSpace(s))
  {
      User newUser = JsonConvert.DeserializeObject<User>(s);
      Console.WriteLine(newUser.Name);
  }
  else
  {
      Console.WriteLine("先序列化");
  }

效果

对象嵌套序列化

Product product = new Product()
{
    Id = 1,
    Name = "小明",
    Description = "小明有一个狗",
    Price = 1000.123f,
    SaleUser = new User { Name = "小兰", Id = 2 }
};

string s = JsonConvert.SerializeObject(product, Formatting.Indented);
Console.WriteLine(s);
Product product1 = JsonConvert.DeserializeObject<Product>(s);
Console.WriteLine(product1.Name);
Console.WriteLine(product1.SaleUser.Name);

数组序列化

  User user1 = new User()
  {
      Id = 1,
      Name = "小丑",
      Email = "168@qq.com",
      Password = "1452"
  };
  User user2 = new User() { Id = 2, Name = "效率", Email = "9999@qq.com", Password = "246810" };


  object[] objs = { user1, user2, true, "不知道" };

  s2 = JsonConvert.SerializeObject(objs, Formatting.Indented);
  Console.WriteLine(s2);

数组反序列化

 if (!string.IsNullOrWhiteSpace(s2))
 {
     object[] objs = JsonConvert.DeserializeObject<object[]>(s2);
     Console.WriteLine(objs[1]);//字符串

     User u = JsonConvert.DeserializeObject<User>(objs[1].ToString());
     Console.WriteLine(u.Name);
 }

效果


http://www.kler.cn/a/542286.html

相关文章:

  • 关于“#pragma arm section zidata = “mgr_buffer_section“的解析
  • 借助 ListWise 提升推荐系统精排效能:技术、案例与优化策略
  • 普通用户授权docker使用权限
  • 从零到一:基于Rook构建云原生Ceph存储的全面指南(上)
  • ndk 编译opencv(去除libandroid.so mediandk依赖)
  • c语言函数学习
  • 深入与浅出-Python爬虫逆向实战
  • CNN-BiLSTM卷积神经网络双向长短期记忆神经网络多变量多步预测,光伏功率预测
  • 河北某石油管廊自动化监测
  • 利用用个人PC搭建私有大模型(低成本、易实施的私有大模型部署方案,兼顾英语 5G协议学习与实践需求)
  • DeepSeek模型R1服务器繁忙,怎么解决?
  • 分层解耦-三层架构
  • 配置Mysql8读写分离(未完成)
  • 历史性突破!DeepSeek双模型GitHub热度超OpenAI,展现中国AI力量
  • 玩转观察者模式
  • C# 数据验证Regex
  • 【MySQL】我在广州学Mysql 系列—— 数据备份与还原
  • Python的那些事第十五篇:数据分析中的“三剑客”NumPy、Pandas与Matplotlib
  • 【Elasticsearch】 查询性能优化
  • win11 python opencv作图像匹配小结
  • idea插件开发,如何获取idea设置的系统语言
  • Render上后端部署Springboot + 前端Vue 问题及解决方案汇总
  • vscode关闭后如何恢复在远程服务器的终端程序运行界面
  • 无人机图像拼接数据的可视化与制图技术:以植被监测为例
  • MATLAB联动本地部署的DeepSeek模型
  • 关于FANUC机器人示教器型号的说明