我目前正在使用以下代码反序列化数据。
using (var zipData = new GZipStream(stream, CompressionMode.Decompress, true))
{
data = Serializer.Deserialize<Dictionary<string, CustomClass>>(zipData);
}
自定义类中包含许多嵌套的自定义对象。我想预编译这个。建议的方法是什么?
谢谢。
答案 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));
}