Unity 使用Protobuf对数据进行序列化与反序列化

  • Protobuf格式协议和xml一样具有平台独立性,可以在不同平台间通信,通信所需资源很少,并可以扩展,可以旧的协议上添加新数据。
  • Protobuf是在java和c++运行的,Protobuf-net当然就是Protobuf在.net环境下的移植。

源码下载网站 https://github.com/mgravell/protobuf-net

Protobuf-net.dll下载后导入到Unity中直接使用,可以作为数据本地存储和网络通讯,类似xml,json等。
直接上代码示例

using ProtoBuf;

[ProtoContract]
public class User {
    [ProtoMember(1)]
    public int ID { get; set; }
    [ProtoMember(2)]
    public string UserName { get; set; }
    [ProtoMember(3)]
    public string Password { get; set; }
    [ProtoMember(4)]
    public int Level { get; set; }
    [ProtoMember(5)]
    public UserType _UserType { get; set; }
    public enum UserType {
        Master,
        Warrior
    }
}

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using ProtoBuf;

public class ProtobufTest : MonoBehaviour {

	// Use this for initialization
	void Start () {
         // Serialization();
        NotSerialization();


    }
    /// <summary>
    /// 序列化User里面的信息内容
    /// </summary>
    void Serialization() {
       

        User user = new User();
        user.ID = 21;
        user.UserName = "爱尚游Bin";
        user.Password = "123456";
        user.Level = 4;
        user._UserType = User.UserType.Warrior;

        using (var fs = File.Create(Application.streamingAssetsPath + "/user.bin"))
        {
            Serializer.Serialize<User>(fs, user);//把user对象序列化出二进制文件放入fs文件里面
           
        }
    }
    /// <summary>
    /// 反序列化User里面的信息内容
    /// </summary>
    void NotSerialization() {
        User user = null;
        using (var fs=File.OpenRead(Application.streamingAssetsPath+"/user.bin")) {
            user = Serializer.Deserialize<User>(fs);//反序列化
        }
        Debug.Log(string.Format("ID:{0},用户名:{1},密码:{2},等级:{3},角色类型:{4}",user.ID,user.UserName,user.Password,user.Level,user._UserType));

    }
}

示例工程下载:ProtobufProject

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值