【发布时间】:2014-01-15 08:12:03
【问题描述】:
我想在我的游戏引擎中使用 protobuf-net,我遇到了这个任务 - 如何有效地区分存储和运行时类型?
基本上,数据在磁盘上的存储方式将具有不同的格式,并使用在运行时加载的格式。
简化示例:我已经将一些与 GPU 相关的数据序列化为 byte[],使用类似这样的类:
[ProtoContract(UseProtoMembersOnly=true)]
public sealed class StoredData
{
[ProtoMember(1)]
public byte[] GpuData;
}
然后我会有这个类的运行时实现,在那里我会将字节缓冲区上传到显卡,因此会有完全不同的类型,比如“class GraphicsBuffer”而不是“byte[]”。
此外,在序列化运行时类型“GraphicsBuffer”时,我还希望序列化完全不同的消息 - 例如磁盘上的路径或要反序列化的 StoredData 的名称。
这一切归结为:
如何在能够定义回调以在这些类型之间进行转换的同时交换用于序列化的类型?这样(例如)
1.当我序列化SoredData时,会写入一个StoredData
2.当我反序列化GraphicsBuffer时,StoredData被反序列化并转换为GraphicsBuffer
3.当我序列化GraphicsBuffer时,该缓冲区的“缓冲区路径消息”被序列化
4.当我反序列化'buffer path message'时,'buffer path message'被反序列化,然后使用该消息找到并反序列化StoredData,而StoredData的反序列化产生从StoredData中的信息创建的GraphicsBuffer。
我希望这有点道理!
【问题讨论】:
标签: c# protocol-buffers protobuf-net