【发布时间】:2020-04-06 12:54:16
【问题描述】:
我想为多人游戏序列化和反序列化各种结构。我目前正在使用统一的 json 序列化:
public static T GetObject<T>(byte[] bytes) {
T t = JsonUtility.FromJson<T>(encoding.GetString(bytes));
return t;
}
public static byte[] GetBytes(object obj) {
string json = JsonUtility.ToJson(obj);
return encoding.GetBytes(json);
}
它工作得很好,但问题是 json 显然不是那么紧凑。我尝试了 BinaryFormatter 和 Marshalling,但 BinaryFormatter 创建了一个我认为不需要的大标题,而且 Marshalling 不适用于结构内的数组和结构。我希望系统尽可能灵活,因为经常添加新结构。
json 序列化与数组、结构内部的结构以及字符串或向量等类型完美配合。所以我正在寻找的是类似于 json 序列化器但更紧凑的东西。
示例结构:
struct A {
Vector3 position;
string name;
}
struct B {
uint id;
A[] examples;
}
【问题讨论】:
-
这个结构是什么样的?你可以添加属性吗? protobuf 在很多情况下都能很好地工作,而且 protobuf-net 通常很容易通过添加一些属性来改造现有类型;如果你有你的结构的例子,我可能会更具体
-
是的,我可以添加属性,我会研究 protobuf。我可以给出一些示例结构,但我希望能够随着时间的推移添加更多结构。
-
(随着时间的推移添加更多)我明白;我只是想a:衡量它的适用性,b:帮助你开始
-
我加了一个例子
-
您好,两个问题:-您是否有理由需要使用 json-您打算如何在客户端和服务器之间传输我在问,因为有很多选项可以使它变得更好,例如 zipstreaming json 字符串很容易,从根本无法工作的网络服务器压缩回复,到 BSON 或 protobuf,我知道您不想使用普通的 C# 内置序列化,或者这是一个选项?等等等等
标签: c# unity3d serialization