【问题标题】:Cannot Serialize Neurotec NTemplate using c# - protobuf-net无法使用 c# 序列化 Neurotec NTemplate - protobuf-net
【发布时间】:2013-03-04 12:54:36
【问题描述】:

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

【问题讨论】:

    标签: c# serialization protobuf-net


    【解决方案1】:

    您已经告诉它不要应用任何标准模式/配置逻辑:

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

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

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

    【讨论】:

    • 嗨,马克,感谢您的回复。根据您的建议,它设置 RuntimeTypeModel.Default.Add(typeof(NTemplate), true);但没有任何改变。我看到 MemoryStream 的容量和长度属性,都是 0。
    【解决方案2】:

    我得到了使用 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());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多