1

我有一个带有一个手指记录的 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);
4

2 回答 2

2

在这里,您告诉它不要应用任何标准模式/配置逻辑:

RuntimeTypeModel.Default.Add(typeof(NTemplate), false);  

所以你基本上已经告诉它“什么都不序列化”。如果您指定false,它希望告诉它您希望它如何工作,例如使用返回的Addon MetaType。我怀疑您也可以指定true它是否具有合适的属性。

请注意,对于 protobuf-net 而言,0 是一个完全合理的长度,并且该对象在网络上没有任何有趣的内容可提及。

于 2013-03-04T14:49:21.723 回答
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());
于 2013-03-05T13:06:31.090 回答