简单的序列化,网上很多,但是突然想到一个问题,如果一个类里用到了另一个,那么怎么办,今天试了试,只需要加上序列号标签就可以了

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using System.IO;
using System.Xml.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;[Serializable]
public class TEST
{public string name;public int age;public Test01 tes;
}[Serializable]
public class Test01
{public float mo;public int[] sum;
}public class Seralizabletest : MonoBehaviour {public byte[] data;// Use this for initializationvoid Start () {Test();}// Update is called once per framevoid Update () {if(Input.GetKeyDown(KeyCode.Space)){DeTest();}}void Test(){TEST EST = new TEST();EST.age = 10;EST.name = "lizhiyong";Test01 test01 = new Test01();test01.mo = 0.5f;test01.sum = new int[4] { 0, 1, 2, 3 };EST.tes = test01;data = SerializeHelper.SerializeToBinary(EST);}void DeTest(){TEST EST = SerializeHelper.DeserializeWithBinary<TEST>(data);Debug.LogError(EST.age);Debug.LogError(EST.name);Debug.LogError(EST.tes.mo);Debug.LogError(EST.tes.sum[3]);}}public static class SerializeHelper
{/// <summary>/// 使用UTF8编码将byte数组转成字符串/// </summary>/// <param name="data"></param>/// <returns></returns>public static string ConvertToString(byte[] data){return Encoding.UTF8.GetString(data, 0, data.Length);}/// <summary>/// 使用指定字符编码将byte数组转成字符串/// </summary>/// <param name="data"></param>/// <param name="encoding"></param>/// <returns></returns>public static string ConvertToString(byte[] data, Encoding encoding){return encoding.GetString(data, 0, data.Length);}/// <summary>/// 使用UTF8编码将字符串转成byte数组/// </summary>/// <param name="str"></param>/// <returns></returns>public static byte[] ConvertToByte(string str){return Encoding.UTF8.GetBytes(str);}/// <summary>/// 使用指定字符编码将字符串转成byte数组/// </summary>/// <param name="str"></param>/// <param name="encoding"></param>/// <returns></returns>public static byte[] ConvertToByte(string str, Encoding encoding){return encoding.GetBytes(str);}/// <summary>/// 将对象序列化为二进制数据 /// </summary>/// <param name="obj"></param>/// <returns></returns>public static byte[] SerializeToBinary(object obj){MemoryStream stream = new MemoryStream();BinaryFormatter bf = new BinaryFormatter();bf.Serialize(stream, obj);byte[] data = stream.ToArray();stream.Close();return data;}/// <summary>/// 将对象序列化为XML数据/// </summary>/// <param name="obj"></param>/// <returns></returns>public static byte[] SerializeToXml(object obj){MemoryStream stream = new MemoryStream();XmlSerializer xs = new XmlSerializer(obj.GetType());xs.Serialize(stream, obj);byte[] data = stream.ToArray();stream.Close();return data;}/// <summary>/// 将二进制数据反序列化/// </summary>/// <param name="data"></param>/// <returns></returns>public static object DeserializeWithBinary(byte[] data){MemoryStream stream = new MemoryStream();stream.Write(data, 0, data.Length);stream.Position = 0;BinaryFormatter bf = new BinaryFormatter();object obj = bf.Deserialize(stream);stream.Close();return obj;}/// <summary>/// 将二进制数据反序列化为指定类型对象/// </summary>/// <typeparam name="T"></typeparam>/// <param name="data"></param>/// <returns></returns>public static T DeserializeWithBinary<T>(byte[] data){return (T)DeserializeWithBinary(data);}/// <summary>/// 将XML数据反序列化为指定类型对象/// </summary>/// <typeparam name="T"></typeparam>/// <param name="data"></param>/// <returns></returns>public static T DeserializeWithXml<T>(byte[] data){MemoryStream stream = new MemoryStream();stream.Write(data, 0, data.Length);stream.Position = 0;XmlSerializer xs = new XmlSerializer(typeof(T));object obj = xs.Deserialize(stream);stream.Close();return (T)obj;}
}

转载于:https://www.cnblogs.com/lzy575566/p/7803298.html

c# 类的序列化,以及嵌套问题相关推荐

  1. django序列化器嵌套_Django Rest Framework中用于OneToOne字段的序列化程序中的嵌套关​​系

    django序列化器嵌套 The Django Rest Framework (DRF) is one of the effectively written frameworks around Dja ...

  2. C++知识点杂记2——类成员指针、嵌套类和union

    一.类成员指针 1.概念 类成员指针指向的是类的非static成员,因为类的static成员是所有类对象共有,所以static成员的指针和普通指针没有区别 2.成员变量指针 示例 class test ...

  3. 类的序列化[Serializable]

    简介 序列化是指将对象实例的状态存储到存储媒体的过程.在此过程中,先将对象的公共字段和私有字段以及类的名称(包括类所在的程序集)转换为字节流,然后再把字节流写入数据流.在随后对对象进行反序列化时,将创 ...

  4. Java : 实体类不能序列化异常

    Java : 实体类不能序列化异常 参考文章: (1)Java : 实体类不能序列化异常 (2)https://www.cnblogs.com/cccy0/p/9496435.html (3)http ...

  5. scala类的序列化_Scala序列理解,通用类和内部类示例

    scala类的序列化 A sequence comprehension statement consists of a generator part which generates a list of ...

  6. C++ 学习笔记之(19) new、delete表达式、RTTI(运行时类型识别)、枚举、类成员指针、嵌套类、局部类、位域、volatile、extern C

    C++ 学习笔记之(19) new.delete表达式.RTTI(运行时类型识别).枚举.类成员指针.嵌套类.局部类.位域.volatile.extern C C++ 学习笔记之(19) new.de ...

  7. 关于类的序列化,下列说法哪些是正确的

    关于类的序列化,下列说法哪些是正确的:答案在文末 A. 类的序列化与serialVersionUID毫无关系. B. 如果完全不兼容升级,不需要修改serialVersionUID值. C. POJO ...

  8. python字典序列化是什么意思_python序列化中的字符串,列表,字典,类的序列化解释...

    python序列化中的字符串,列表,字典,类的序列化解释 yuaneuro • 2020 年 03 月 07 日 我们知道现在各大语言都有其序列化数据和反序列的方式, 比如php的serialize和 ...

  9. 序列化-序列化的嵌套

    class Merchant(models.Model):"""商家"""name = models.CharField(max_lengt ...

  10. 类的成员和嵌套(建模)

    一. 类的成员共分为三类: 字段, 方法, 属性 class Foo:country = '中国' # 静态字段def __init__(self, name):self.name = name # ...

最新文章

  1. vue 表格左右拖拽调整列宽_解决 | iview低版本实现表格拖拽,滚动条列宽计算问题...
  2. 为什么计算机模拟不了人脑,为什么计算机永远不会拥有人类的意识?听完科学家的解释恍然大悟...
  3. (六)数据结构之“集合”
  4. 『软件工程1』详解软件是什么
  5. Spring Boot文档阅读笔记-how-to-implement-2-way-ssl-using-spring-boot
  6. Objects.equals 有坑!!!
  7. 修改数据文件和日志文件路径
  8. lede 内核 单 编_openwrt详细设置教程,lede固件设置中文
  9. 一文快速了解MaxCompute
  10. 数据分析师的工作职责
  11. vue动态绑定背景图片
  12. 第一节:(3)逻辑芯片工艺衬底选择
  13. 步进电机编写单4拍或4-8拍方式的汇编或c语言控制程序.,51单片机C语言和汇编控制28BYJ48步进电机程序...
  14. Kali下用wifite破解WIFI
  15. 2021年中国皮革行业市场现状分析,PU合成革趋势明显,汽车皮革是关键需求「图」
  16. 第二届阿里巴巴大数据智能云上编程大赛亚军比赛攻略
  17. HttpClient模块的HttpGet和HttpPost及Connection to refuse解决
  18. 闭关修炼(十八)maven
  19. 高项.十大管理47个过程
  20. 学习笔记:简谈BUCK电路

热门文章

  1. 【洛谷 P3299】 [SDOI2013]保护出题人 (凸包,三分,斜率优化)
  2. XenServer 6.5实战系列之九:Creating a VM Template from a VM Snapshot
  3. mysql 压力测试
  4. demo2 Kafka+Spark Streaming+Redis实时计算整合实践 foreachRDD输出到redis
  5. erlang随机数问题
  6. ASP.NET 主题和外观
  7. 03_部署并访问项目,处理404,500(servlet+java bean+jsp的商城教程)
  8. [Java][Android] 多线程同步-主线程等待所有子线程完成案例
  9. Android开发人员必看的资料
  10. 网络基础知识(黑马教程笔记)-7-异步编程和Promise