XML和二进制文件的序列化和反序列化

本文详细介绍了在Unity环境下如何使用XML和二进制格式进行数据序列化和反序列化。包括XML序列化的具体实现,如创建文件流、序列化对象,并通过反序列化读取XML文件。同时,也探讨了二进制序列化的方法,以及如何在Unity中加载和解析二进制数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.XML文件的序列化

 void Start()
    {
        TestData Data = new TestData();
        Data.PlayerID = 1001;
        Data.PlayerName = "Test01";
        Data.WeaponID = new List<int>();
        Data.WeaponID.Add(1);
        Data.WeaponID.Add(2);
        XMLSerilize(Data);
    }

    void XMLSerilize(TestData data)
    {
        //创建文件流
        FileStream fileStream = new FileStream(Application.dataPath + "/TestXML.xml", FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
        //写入流
        StreamWriter sw = new StreamWriter(fileStream, System.Text.Encoding.UTF8);
        //序列化对象
        XmlSerializer xml = new XmlSerializer(data.GetType());
        xml.Serialize(sw, data);
        sw.Close();
        fileStream.Close();
        AssetDatabase.Refresh();
    }

2.XML反序列化

 TestData XMLDeserilize()
    {
        FileStream fileStream = new FileStream(Application.dataPath + "/TestXML.xml", FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
        XmlSerializer xml = new XmlSerializer(typeof(TestData));
        TestData data = (TestData)xml.Deserialize(fileStream);
        fileStream.Close();
        return data;
    }

数据类:

using System.Xml.Serialization;
[System.Serializable]
public class TestData 
{
    [XmlAttribute("PlayerID")]
    public int PlayerID { set; get; }
    [XmlAttribute("PlayerName")]
    public string PlayerName { set; get; }
    [XmlElement("WeaponID")]
    public List<int> WeaponID { set; get; }

   
}

3.二进制文件的序列化

拿上面的数据类 来序列化二进制

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

4.二进制文件的反序列化


    TestData BinaryDeserilize()
    {
        TextAsset textAsset = AssetDatabase.LoadAssetAtPath<TextAsset>("Assets/TestBinary.bytes");
        MemoryStream st = new MemoryStream(textAsset.bytes);
        BinaryFormatter bf = new BinaryFormatter();
        TestData data = (TestData)bf.Deserialize(st);
        st.Close();
        return data;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值