1

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

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

自定义类里面有很多嵌套的自定义对象。我想预编译这个。推荐的方法是什么?

谢谢你。

4

1 回答 1

1

它应该可以工作,即使在预编译时也是如此 - 只要CustomClass具有合适的[ProtoContract]etc 属性,以便precompile.exe工具知道该做什么。您可以通过使用单个根对象来提供更多帮助:

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

但这不是必需的,并且当它发生时,作为根对象的列表/字典/等的输出与以列表/字典/等作为第一个成员 ( )的包装器对象的输出100% 相同。[ProtoMember(1)]

要预编译,precompile.exe请从 google-code 下载中使用:

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));
}
于 2013-11-14T08:01:43.137 回答