如何在不引用protobuf-net的情况下使C#类protobuf-net-serializable?

时间:2013-07-17 09:33:05

标签: protocol-buffers protobuf-net

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

  1. 我不知道客户会使用哪种环境,所以我不知道选择哪种protobuf-net二进制文件
  2. 我希望最小化占用空间大小(可能根本不需要序列化)
  3. 据我了解,这可以通过手动编写.proto文件来完成。任何人都可以解释我或给出一个如何做到这一点的链接?有没有办法从属性描述生成.proto文件?客户端序列化/反序列化代码将如何显示?

1 个答案:

答案 0 :(得分: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类型知道序列化)

  3. 其中任何一个都应该有用。

相关问题