首页 > 其他分享 >序列化和反序列化

序列化和反序列化

时间:2024-05-22 14:07:07浏览次数:22  
标签:面板 return int new 序列化 public

1.什么是序列化和反序列化?

序列化:把对象转化为可传输的字节序列过程称为序列化。
反序列化:把字节序列还原为对象的过程称为反序列化。
2.序列化的目的?  
序列化最终的目的是为了对象可以跨平台存储,和进行网络传输。而我们进行跨平台存储和网络传输的方式就是IO,而我们的IO支持的数据格式就是字节数组。
  3.序列化协议的选择?
序列化协议各有千秋,不能简单的说一种序列化协议是最好的,只能从你的当时环境下去选择最适合你们的序列化协议,如果你要为你的公司项目进行序列化技术的选型,那么主要从以下几个因素。 协议是否支持跨平台 序列化的速度
序列化出来的大小
    4.Java实现序列化 java 实现序列化很简单,只需要实现Serializable 接口即可
public class User implements Serializable{
 //年龄
 private int age;
 //名字
 private String name ;
 public int getAge() {
 return age;
    }
 public void setAge(int age) {
 this.age = age;
    }
 public String getName() {
 return name;}
 public void setName(String name) {
 this.name = name;}
}
序列化之后可以写入文件
FileOutputStream fos = new FileOutputStream("D:\\temp.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);

User user = new User();
user.setAge(18);
user.setName("sandy");
oos.writeObject(user);

oos.flush();
oos.close();
再从文件中读取转换为对象
FileInputStream fis = new FileInputStream("D:\\temp.txt");

ObjectInputStream oin = new ObjectInputStream(fis);

User user = (User) oin.readObject();

System.out.println("name="+user.getName());
5.C#序列化 序列化可以使用protobuf,是一种序列化格式 [Unity文件处理]ProtoBuf.note   C#自带序列化为BinaryFormatter类(System.Runtime.Serialization.Formatters.Binarry)可以将对象序列化为二进制数据,把二进制数据反序列化为对象   序列化类转换成二进制,保存为txt
/// <summary>
        /// 类转换成二进制
        /// </summary>
        /// <param name="path"></param>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static bool BinarySerilize(string path, System.Object obj)
        {
            try
            {
                using (FileStream fs = new FileStream(path, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite))
                {
                    BinaryFormatter bf = new BinaryFormatter();
                    bf.Serialize(fs, obj);
                }

                return true;
            }
            catch (Exception e)
            {
                Debug.LogError("此类无法转换成二进制 " + obj.GetType() + "," + e);
            }

            return false;
        }
反序列化转换为对象
/// <summary>
    /// 反序列化
    /// </summary>
    public T BinaryDeSerilize<T>(string path) where T : class
    {
        try
        {
            using (FileStream loadFile = new FileStream(path, FileMode.Open, FileAccess.Read))
            {
                BinaryFormatter bf = new BinaryFormatter();
                return bf.Deserialize(loadFile) as T;
            }
        }
        catch (IOException e)
        {
            Debug.LogError("反序列化错误," + path + "," + e);
        }

        return null;
    }

Unity序列化: 1.序列化的是类中的字段、属性--->除此之外,其他一切不会参与序列化的过程。 2.序列化: 属性、字段必须为public。 3.序列化的过程可以看做是: 先创建一个对象,然后再对对象里边的成员进行复制,所以xml序列化的成员必须是public,public说明成员可以在类外部进行访问,对象一旦被创建就会为它分配空间。

 

编辑器中序列化的作用是: 可以显示变量(类,结构等)在inspector(检视面板)上
[System.Serializable] 把自定义的类变成可以在Unity编辑器中看到的类
[HideInInspector] 表示将原本显示在面板上的序列化值隐藏起来。
[SerializeField] 可以把私有的变量显示出来
  1、如果a是公有的序列化变量。

(1)如果你想要在面板中看到变量a,那么用: public int a; (2)如果你不想在面板中看到变量a,那么用: [HideInInspector] public int a; 这样a可以在程序中被代码赋值,但不会在面板中看到,也不能手动设置赋值。 2、如果a是私有的序列化变量,你想在面板中读取并赋值,那么用:
[SerializeField]
private int a;

3、如果a是私有的序列化变量,你想在面板中读取,但是不赋值,那么用:

[HideInInspector][SerializedField]
           private int a;
           public int b
           {
               get{return a;}
           }
           然后在Editor中显示,EditorGUILayout.LabelField("value",game.b.ToString());
4、如果a是私有序列化变量,你不想在面板中做任何操作(不想看到,也不想写),但是想要在程序中给它赋值,那么用。

 
 [HideInInspector]
          [SerializedField]
           private int a;
           public int b
           {}

 

标签:面板,return,int,new,序列化,public
From: https://www.cnblogs.com/weigangblog/p/18206119

相关文章

  • 序列化与反序列化
    引用DLL文件:Newtonsoft.Json.dll路径:D:\yonyou\U9CE\Portal\bin\C#实体类List<Departments>deptss=newList<Departments>();privatevoidDepartment_Load(objectsender,EventArgse){strUri=TexURI.......
  • Jackson 库中@JsonProperty和@JsonAlias注解实现序列化反序列化
    Json序列化一般为实体转化生成的JSON数据中直接包含嵌套对象的属性ObjectMappermapper=newObjectMapper();Bookbook=newBook("LearningJava","Java");Writerwriter=newWriter(110,"Mohit",book);StringjsonWriter=......
  • Java常用的JSON序列化与反序列化工具实践
    JSON简介:JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,通常用于在不同系统之间传输数据。它基于JavaScript对象语法,但已成为一种独立于语言的格式。JSON数据以键值对的形式组织,易于阅读和编写。为什么要使用JSON?1.简单易用:JSON的语法简单,易于理解和编写,可以......
  • 【C#】读取文件反序列化对应类
    ///<summary>///反序列化///</summary>///<paramname="filePath">文件路径</param>///<returns></returns>publicstaticList<T>JsonToList<T>(stringfilePath){stringjsonStr=File.ReadAllText(fi......
  • 如何正确实现一个自定义可序列化的 Exception
    最近在公司的项目中,编写了几个自定义的Exception类。提交PR的时候,sonarqube提示这几个自定义异常不符合ISerializablepatten.花了点时间稍微研究了一下,把这个问题解了。今天在此记录一下,可能大家都会帮助到大家。自定义异常#编写一个自定义的异常,继承自Exception,其中......
  • redis存储之序列化问题
    1.问题描述:在SpringBoot集成Redis过程中,添加进redisf的内容如下2.出现这种情况的原因(1) 键和值都是通过Spring提供的Serializer序列化到数据库的(2) RedisTemplate默认使用的是JdkSerializationRedisSerializer,StringRedisTemplate默认使用的是StringRedisSerializer3.解......
  • Weblogic T3反序列化漏洞(CVE-2018-2628)
    目录前言T3协议概述漏洞复现修复方案前言WebLogicServer是一个企业级的应用服务器,由Oracle公司开发,支持完整的JavaEE规范,包括EJB、JSP、Servlet、JMS等,适合大型分布式应用和高负载场景。T3协议概述T3协议(Two-TierTCP/IPProtocol),是WebLogic中的一种专有协议,建立在TCP/IP协......
  • 使用Spring HttpExchange时数据对象遇LocalDateTime字段类型json反序列化失败的解决方
    方法:重写MessageConverter,使得yyyy-MM-ddHH:mm:ss的字符串能反序列化到LocalDateTime类型上。@ConfigurationpublicclassHttpClientConfig{@Value("${service.host}")privateStringhost;@BeanRestClient.BuilderrestClientBuilder(){r......
  • 关于SpringBoot项目使用Hutool工具进行json序列化时出现Null值过滤或者丢失的问题(转
    ##问题描述:SpringBoot项目中,一直使用的时Hutool的json转换工具,被强制要求不能使用fastJson工具;之前都没什么问题,突然有一次使用parseObj()进行json字符串转换json对象时,突然报错:Noserializerfoundforclasscn.hutool.json.JSONNullandnopropertiesdiscoveredtocreate......
  • [HDCTF 2023]YamiYami python中的另一种反序列化--yaml
    今天做了到新颖的题,关于python中的yaml反序列化的题目,直接上题吧。发现第一个链接的参数是?url=XXXX,一眼利用点。嗯?直接出了flag,应该是非预期解。再看看有app.py,那就试试。发现app.*被过滤了,二次编码绕过试试。点击查看代码@app.route('/')defindex():session['pas......