我可以反序列化原型到对象类型吗

时间:2018-10-21 19:01:03

标签: c# protobuf-net

众所周知,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);
}

有什么办法可以反序列化原型到对象类型?

1 个答案:

答案 0 :(得分:2)

现在:否。部分是因为它不是必需的,部分是因为.proto在没有附加信息的情况下是模棱两可的。该信息通常由.proto模式文件提供,或者(通过protobuf-net)通过代码属性提供。没有这种上下文,就会有很多无法正确解释的值。

在希望进行调查的事情清单中,添加了真正的dynamic支持,但如上所述:如果您没有Type,则需要提供一条消息而不是描述符(假设protobuf-net具有完全托管的模式解析器,则可以将其编译为.proto或假设为文本)。

如果您确实有Type,但刚完成时有<T>,请注意,protobuf-net还具有完整的非泛型API,可以接受Type作为输入。 / p>