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

编写需要的序列化的代码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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 文/半字码头 心的乌镇,来过 未曾离开。 这次来乌镇就是冲着这句话来的,朋友说毫无疑问这句营销文案很成功。其实第二...
    半字码头阅读 3,240评论 2 12
  • 一.提升思考和表达的效率 全书就是一个典型的结构思考力模型图,从第一步明确理念,第二步定主题,到最后形象表达做演示...
    星魁的实验室阅读 2,870评论 0 1
  • 至今,我都会记得我住在平房时,每次一打开院门,脚一迈进院里,就哗啦一下,被一群跑都跑不稳的,左摇右晃的小奶狗们包围...
    爱若是花阅读 1,547评论 4 5
  • 第60届葛莱美音乐奖颁奖典礼红毯星光与日前金球奖的「黑衣秀」上演相同剧情,众星们配戴「白玫瑰」倡导性别平等。也因为...
    七维度阅读 1,820评论 0 0