1

首先,我真的很喜欢 protobuf-net,因为它的速度和易用性。现在我正在开发一个 .NET 类库,并希望在不实际引用它的情况下使我的一些类 protobuf-net-ready,因为:

  1. 我不知道我的客户会使用哪个环境,所以我不知道该选择哪个 protobuf-net 二进制文件
  2. 我想最小化占用空间(也许他们根本不需要序列化)

据我了解,这可以通过手动编写 .proto 文件来完成。谁能解释我或给一个链接如何做到这一点?有没有办法从属性描述生成 .proto 文件?客户端序列化/反序列化代码会是什么样子?

4

1 回答 1

1

据我了解,这可以通过手动编写 .proto 文件来完成

没有; 这没有必要,也无济于事。

假设您目前有一个类型:

[ProtoContract]
public class Foo {
    [ProtoMember(1)]
    public int Bar {get;set;}
    // ...
}

有两种选择可以做你想做的事:

  1. 使用内置的平台属性,例如:

    [DataContract]
    public class Foo {
        [DataMember(Order=1)]
        public int Bar {get;set;}
        // ...
    }
    

    或者

    [XmlType]
    public class Foo {
        [XmlElement(Order=1)]
        public int Bar {get;set;}
        // ...
    }
    
  2. 在运行时显式配置模型(在模型尝试使用之前Foo):

    RuntimeTypeModel.Default.Add(typeof(Foo), false).Add(1, "Bar");
    

    (当然,后者在某些时候仍然需要您与之交谈ProtoBuf,但它不需要您的 POCO 类型了解序列化)

这些中的任何一个都应该起作用。

于 2013-07-17T11:19:51.247 回答