无法使用c# - protobuf-net序列化Neurotec NTemplate

时间:2013-03-04 12:54:37

标签: c# serialization protobuf-net

我有一个带有一个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);

2 个答案:

答案 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());