我有一个带有一个Finger记录的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);
答案 0 :(得分:2)
这里你告诉它不要应用任何标准模式/配置逻辑:
RuntimeTypeModel.Default.Add(typeof(NTemplate), false);
所以你基本上已经告诉它“序列化什么都没有”。如果您指定false
,则希望您告诉它您希望它如何工作,例如在返回的Add
上使用MetaType
。我怀疑如果它有合适的属性,你也可以指定true
。
请注意,对于protobuf-net而言,0是一个非常合理的长度,并且该对象在线上没有任何有趣的内容。
答案 1 :(得分: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());