美文网首页
序列化与反序列化(xml与二进制与Assets)

序列化与反序列化(xml与二进制与Assets)

作者: pawn_c | 来源:发表于2019-09-29 09:05 被阅读0次

编写需要的序列化的代码TestSerilize.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Xml.Serialization;

[System.Serializable]
public class TestSerilize
{
    [XmlAttribute("Id")]
    public int Id { get; set; }

    [XmlElement("Name")]
    public string Name { get; set; }

    [XmlElement("List")]
    public List<int> List { get; set; }
}

如果不懂XmlAttribute与XmlElement是什么意思可以查询https://www.w3cschool.cn/jaxb2/jaxb2-dwxr2zom.html

Xml序列化与反序列化

序列化

代码如下

//创建对象
    void SerilizeTest()
    {
        TestSerilize testSerilize = new TestSerilize();
        testSerilize.Id =1;
        testSerilize.Name = "pawn";
        testSerilize.List = new List<int>();
        testSerilize.List.Add(1);
        testSerilize.List.Add(2);
        XmlSerilize(testSerilize);
    }

    //序列化成xml
    void XmlSerilize(TestSerilize testSerilize)
    {
        FileStream fileStream = new FileStream(Application.dataPath+"/Test.xml",FileMode.Create,FileAccess.ReadWrite,FileShare.ReadWrite);
        StreamWriter sw = new StreamWriter(fileStream, System.Text.Encoding.UTF8);
        XmlSerializer xml = new XmlSerializer(testSerilize.GetType());
        xml.Serialize(sw, testSerilize);
        sw.Close();
        fileStream.Close();
    }

执行SerilizeTest后我们可以在Assets目录下看到生成的XMl文件

image.png

文件内容如下

<?xml version="1.0" encoding="utf-8"?>
<TestSerilize xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Id="1">
  <Name>pawn</Name>
  <List>1</List>
  <List>2</List>
</TestSerilize>

反序列化

代码如下

    //xml反序列化
    void XmlDeSerilize()
    {
        FileStream fs = new FileStream(Application.dataPath + "/Test.xml", FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
        XmlSerializer xs = new XmlSerializer(typeof(TestSerilize));
        TestSerilize testSerilize = (TestSerilize)xs.Deserialize(fs);
        fs.Close();



        Debug.Log(testSerilize.Id);
        Debug.Log(testSerilize.Name);

    }

执行XmlDeSerilize后结果


image.png

二进制序列化与反序列化

序列化

代码如下

 void BinarySerTest()
    {
        TestSerilize testSerilize = new TestSerilize();
        testSerilize.Id = 2;
        testSerilize.Name = "pawn";
        testSerilize.List = new List<int>();
        testSerilize.List.Add(1);
        testSerilize.List.Add(2);

        BinarySerilize(testSerilize);
    }

    void BinarySerilize(TestSerilize testSerilize)
    {
        FileStream fileStream = new FileStream(Application.dataPath + "/Test.bytes", FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
        BinaryFormatter bf = new BinaryFormatter();
        bf.Serialize(fileStream, testSerilize);
        fileStream.Close();
    }

执行SerilizeTest后我们可以在Assets目录下看到生成的bytes文件


image.png

打开全是乱码

反序列化

代码如下

void BinaryDeSerilize()
    {
        TextAsset textAsset = UnityEditor.AssetDatabase.LoadAssetAtPath<TextAsset>("Assets/test.bytes");
        MemoryStream stream = new MemoryStream(textAsset.bytes);


        BinaryFormatter bf = new BinaryFormatter();
        TestSerilize testSerilize = (TestSerilize)bf.Deserialize(stream);
        
        stream.Close();


        Debug.Log(testSerilize.Id);
        Debug.Log(testSerilize.Name);
    }

执行BinaryDeSerilize后结果


image.png

assets序列化与反序列化

序列化

创建AssetsSerilize.cs代码


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[CreateAssetMenu(fileName ="TestAssets",menuName ="CreatAssets",order =0)]
public class AssetsSerilize : ScriptableObject
{
    public int Id;
    public string Name;
    public List<string> TestList;
}

然后我们在Assets面板下右键>Create下可以看到我们在代码里申明的CreatAssets

image.png

点击CreatAssets,然后就会在当前目录生成TestAssets文件

image.png

点击生成的TestAssets文件,可以在Inspector面版下设置参数

image.png

反序列化

代码如下

 void ReadTestAssets()
    {
        AssetsSerilize assets = UnityEditor.AssetDatabase.LoadAssetAtPath<AssetsSerilize>("Assets/Scripts/TestAssets.asset");
        Debug.Log(assets.Id);
    }

执行ReadTestAssets后结果


image.png

相关文章

  • 序列化与反序列化(xml与二进制与Assets)

    编写需要的序列化的代码TestSerilize.cs 如果不懂XmlAttribute与XmlElement是什么...

  • 序列化与反序列化1

    一、什么是序列化与反系列化? 序列化是将对象转换为二进制形式的数据(如Java中的byte数组),反序列化是再将二...

  • Android 序列化 & 反序列化

    What? 何为序列化与反序列化?序列化:将对象转化为二进制序列的过程反序列化:将二进制序列恢复为原始对象的过程 ...

  • 序列化和反序列化

    序列化与反序列化 (一)定义 序列化:把实体转化为二进制,保存到磁盘或者进行网络传输。 反序列化:序列化过程中所生...

  • 富友支付新API如何使用?

    1. 由于富友API以XML作为序列化手段,因此需要一个辅助类进行Java bean与XML之间的序列化和反序列化...

  • Java序列化与反序列化

    问题 Java序列化与反序列化是什么?为什么需要序列化与反序列化?有什么好处?如何实现Java序列化与反序列化? ...

  • C#面向对象基础3

    1.序列化与反序列化序列化:对象转换为二进制(为了传输数据,计算机以及网络中的数据都是以二进制进行识别) [Ser...

  • 《成神之路-基础篇》Java基础知识——序列化(已完结)

    Java对象的序列化与反序列化 介绍了序列化与反序列化的基本用法 深入分析Java的序列化与反序列化 介绍了wri...

  • Serializable中为什么要设置UID

    1、什么是Java序列化与反序列化 Java序列化是指把Java对象保存为二进制字节码的过程,Java反序列化是指...

  • Java序列化

    1.java序列化与反序列化的概念 序列化将数据结构或者对象转化为二进制的过程 反序列化将在序列化过程中生成的二进...

网友评论

      本文标题:序列化与反序列化(xml与二进制与Assets)

      本文链接:https://www.haomeiwen.com/subject/lyqoectx.html