爲什麼反序列化不提供輸出類型?protobuf-net反序列化不提供輸出類型
通常,如果兩個端點正在通信,則兩端共享相同的類型。在我的情況下,我在客戶端和服務器應用程序上使用完全相同的庫。在啓動時註冊我的所有類型都在客戶端和服務器這樣的:
var metaType = RuntimeTypeModel.Default.Add(type, false);
foreach(var prop in type.GetProperties())
metaType.Add(i++, prop.Name);
,所以我期待的Protobuf去理解它應該反序列化爲無需提供一個類型。 目前我使用這個反序列化:
RuntimeTypeModel.Default.DeserializeWithLengthPrefix(
stream, null, type, ProtoBuf.PrefixStyle.Fixed32, 0);
這種行爲(在其他串行太找到)迫使我有包裝的每一個對象,我想序列化和內,我有一個實際超有效載荷和其他一些幫助我理解如何反序列化有效載荷的信息。所以我可以這樣寫:
public class MySuperType
{
public byte[] Payload {get; set;}
public Type PayloadType {get; set;}
}
public object Deserialize(byte[] bytes)
{
using(var stream = new MemoryStream(bytes))
{
var wrapperObject = Serializer.DeserializeWithLengthPrefix<MySupertype>
(stream, ProtoBuf.PrefixStyle.Fixed32);
using(var stream = new MemoryStream(wrapperObject.Payload))
{
var actualPayloadObject = RuntimeTypeModel.Default.DeserializeWithLengthPrefix(
stream, null, wrapperObject.PayloadType, ProtoBuf.PrefixStyle.Fixed32, 0);
return actualPayloadObject;
}
}
}
所以我基本上知道我收到的每個對象都是MySupertype類型。 我是否把事情搞亂了?
我用後一種方法取得了巨大的成功。 – Rotem 2014-12-03 11:33:40