【问题标题】:Can I deserialize proto to object type我可以将 proto 反序列化为对象类型吗
【发布时间】:2018-10-21 19:01:03
【问题描述】:

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

有没有办法将 proto 反序列化为对象类型?

【问题讨论】:

    标签: c# protobuf-net


    【解决方案1】:

    现在:没有。部分原因是没有必要,部分原因是 .proto 在没有额外信息的情况下是模棱两可的。该信息通常由 .proto 模式文件提供,或者(在 protobuf-net 的情况下)通过代码属性提供。如果没有这个上下文,就会有很多值无法正确解释。

    添加真正的dynamic 支持是可能需要调查的事情的愿望清单,但根据上述:如果您没有Type,则需要提供消息描述符(这假设可以编译为 .proto 或文本 - 因为 protobuf-net 具有完全托管的模式解析器)。

    如果您确实有一个 Type 但刚刚有一个 &lt;T&gt;,那么请注意 protobuf-net 也有一个完整的非通用 API,它接受 Type 作为输入。

    【讨论】:

    • 因此,要将 proto 转换为对象类型,我需要提供反序列化模式。我说的对吗?
    • @Dakito 不,现在只存在基于 Type 的反序列化 - 除非您反序列化为 ExtensibleObject 并手动完成所有操作。传递消息描述符(.proto 术语中的 message 定义)的能力是我喜欢添加的未来功能,但尚未看到任何重大需求
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 2010-12-25
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    • 2011-01-25
    • 1970-01-01
    相关资源
    最近更新 更多