2013-07-17 51 views
1

首先,我非常喜歡protobuf-net,因爲它速度快,易於使用。 現在我正在開發一個.NET類庫,並希望做一些我的課的protobuf網準備沒有實際引用它,因爲:如何使C#類protobuf-net-serializable不引用protobuf-net?

  1. 我不知道我的客戶端將使用哪種環境,所以我不知道選擇哪個protobuf網二元
  2. 我希望儘量減少足跡大小(也許他們並不需要序列化的話)

據我所知,這可以通過書面形式進行。原始文件手動。任何人都可以解釋我或給一個鏈接如何做到這一點?有沒有辦法從屬性描述生成.proto文件?客戶端序列化/反序列化代碼將如何顯示?

回答

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類型知道序列化)

這些都應該工作。

+0

感謝您的回答! 但現在我有另一個問題:我的類型看起來像列表不幸的是:(所以我需要「IgnoreListHandling = true」,似乎我不能用DataContract屬性來做到這一點。 – lonelyass