众所周知,protobuf-net不是为动态处理数据而创建的,但是如果将对象序列化为proto文件,我可以再次将其反序列化为对象并将其用作动态对象。
例如:
object p = new
{
Value = "Test"
};
//Saving object to file works perfectly
using (var file = File.Create("test.bin"))
{
Serializer.Serialize(file, p);
}
//But this doesn't
using (var file = File.OpenRead("test.bin"))
{
dynamic data = Serializer.Deserialize<object>(file);
Console.WriteLine(data.Id);
}
有什么办法可以反序列化原型到对象类型?
答案 0 :(得分:2)
现在:否。部分是因为它不是必需的,部分是因为.proto在没有附加信息的情况下是模棱两可的。该信息通常由.proto模式文件提供,或者(通过protobuf-net)通过代码属性提供。没有这种上下文,就会有很多无法正确解释的值。
在希望进行调查的事情清单中,添加了真正的dynamic
支持,但如上所述:如果您没有Type
,则需要提供一条消息而不是描述符(假设protobuf-net具有完全托管的模式解析器,则可以将其编译为.proto或假设为文本)。
如果您确实有Type
,但刚完成时有<T>
,请注意,protobuf-net还具有完整的非泛型API,可以接受Type
作为输入。 / p>