无法使用protobuf-net序列化Neurotec NTemplate
本文关键字:序列化 Neurotec NTemplate protobuf-net | 更新日期: 2023-09-27 18:02:11
我有一个带有一个手指记录的Neurotec NTemplate。现在我想用c# - protobuf-net序列化它。我没有得到任何例外,但我的MemoryStream是空的。有什么问题吗?
代码如下:(其中tenPrintTemplate是一个NTemplate)
tenPrintTemplate.AddFingers(fingerPrintTemplate.Save());
//start Proto Buffer serialization
MemoryStream stream = new MemoryStream();
RuntimeTypeModel.Default.InferTagFromNameDefault = true;
RuntimeTypeModel.Default.Add(typeof(NTemplate), false);
ProtoBuf.Serializer.Serialize<NTemplate>(stream, tenPrintTemplate);
这里你已经告诉它不要应用任何标准的模式/配置逻辑:
RuntimeTypeModel.Default.Add(typeof(NTemplate), false);
所以你基本上告诉它"不序列化任何东西"。如果您指定false
,它期望您告诉它您希望它如何工作,例如,在返回的MetaType
上使用Add
。我怀疑你也可以只指定true
,如果它有合适的属性。
请注意,对于protobuf-net来说,0是一个完全合理的长度,对于一个没有什么有趣的东西要提到的对象。
我已经得到了用c# Protobuf-net序列化Neurotec的NTemplate的解决方案。我在下面添加解决方案代码。如果有人遇到同样的问题,请把它作为你的解决方案。
//Its a NTemplate of TenPrint
tenPrintTemplate.AddFingers(fingerPrintTemplate.Save());
//start Proto Buffer serialization
MemoryStream stream = new MemoryStream();
int tenpritnTemplateSize = tenPrintTemplate.GetSize();
NBuffer buffer = new NBuffer(tenpritnTemplateSize);
// saving fingers template to buffer.
tenPrintTemplate.Save(buffer);
ProtoBuf.Serializer.Serialize<byte[]>(stream, buffer.ToArray());