如何使用原始类型作为代理?

时间:2014-04-15 19:07:42

标签: protobuf-net

我使用定点类型,例如

public struct Fixed16 {
    public int N;
    public static implicit operator double(Fixed16 x)
        { return (double)x / 65536.0; }
    public static implicit operator Fixed16(double x)
        { return Fixed16.FromFixed((int)(x * 65536.0)); }
    public static Fixed16 FromFixed(int n) { return new Fixed16 { N = n }; }
    ...
}

为了提高效率,在协议缓冲区中,我想在每次在其他类型中使用时将其存储为普通整数。怎么样?

1 个答案:

答案 0 :(得分:0)

AFAIK,protobuf-net目前不支持原始类型作为代理。它可能会起作用,但我需要一点时间来看它。选项:

  • 推迟发生的变化,并使用原始代理
  • 将pass-thru属性添加到具有Fixed16个实例的代码中,以将数据公开为int,并将这些属性标记为序列化 - 即

    public Fixed16 Foo {get;set;}
    [ProtMember(17)]
    private int FooSerialized { get { return Foo; } set { Foo = value; } }
    
  • 标记Fixed16以序列化单个内部标头,并接受额外的字段标题

请注意,前两个选项应该是字节兼容的;第三个选项具有不同的布局,与其他两个选项不是字节兼容的。