Protobuf-net:推荐预编译Dictionary <string,customclass =“”> </string,>的方法

时间:2013-11-14 00:00:05

标签: protobuf-net

我目前正在使用以下代码反序列化数据。

using (var zipData = new GZipStream(stream, CompressionMode.Decompress, true))
{
    data = Serializer.Deserialize<Dictionary<string, CustomClass>>(zipData);
}

自定义类中包含许多嵌套的自定义对象。我想预编译这个。建议的方法是什么?

谢谢。

1 个答案:

答案 0 :(得分:1)

只要CustomClass具有合适的[ProtoContract]等属性,即使在预编译时只能正常工作,以便precompile.exe工具知道什么去做。您可以使用单个根对象来帮助它:

[ProtoContract]
public class SomeWrapper {
    [ProtoMember(1)]
    public Dictionary<string, CustomClass> Items {get;set;}
}

但这并不重要,因为它发生了作为根对象的列表/字典/等的输出与包含列表/字典的包装器对象的输出 100%相同 / etc作为第一个成员([ProtoMember(1)])。

要预编译,请使用Google代码下载中的precompile.exe

precompile YourApp\Your.dll –o:YourSerializer.dll –t:YourSerializer

然后应用程序级代码变为:

using (var zipData = new GZipStream(stream, CompressionMode.Decompress, true))
{
    var serializer = new YourSerializer();
    data = (SomeWrapper)serializer.Deserialize(
        zipData, null, typeof(SomeWrapper));
}