序列化未知类型

时间:2014-05-31 19:21:54

标签: protobuf-net

好的,我会尝试更清楚地解释我尝试的内容here

据我所知,protobuf是一种适用于已知类型的协议,您可以序列化包含您也知道的数据的给定类型的对象。

我真的想知道Marc的实现是否有办法序列化[ProtoMember]类型的object,这可能指向基本类型的实例或已经由库管理的集合

看起来不是,但我有点沮丧,因为我觉得Marc的图书馆可以做到这一点,考虑到它已经在做的所有反射/生成的东西。

它不完全符合协议,但我不在乎,因为我在两端使用相同的库以紧密的方式。

我确实需要序列化来自Dictionary<int, string> ProtoMember Object的{​​{1}}。

2 个答案:

答案 0 :(得分:2)

对于单个对象,DynamicType=true上存在[ProtoMember]。它不漂亮,并且不聪明,它不是我所说的可靠的#34;。我强烈建议找到任何替代方法。它也不适用于列表。继承支持要好得多,一个巧妙的技巧是通用继承,即

[ProtoContract]
[ProtoInclude(1, typeof(Foo<int>))]
[ProtoInclude(2, typeof(Foo<string>))]
[ProtoInclude(3, typeof(Foo<Customer>))]
// etc for expected types
public abstract class Foo {
    public abstract object Value { get; }
}
[ProtoContract]
public sealed class Foo<T> : Foo {
    public override object Value { get { return TypedValue; } }
    [ProtoMember(1)]
    public T TypedValue {get;set;}
}

并序列化Foo而不是object

答案 1 :(得分:1)

从定义为对象的ProtoMembers序列化原始类型怎么样?我记得2011年就此主题发表的一个问题(https://code.google.com/p/protobuf-net/issues/detail?id=175),我们对此有任何更新吗?

我要做的是保持与使用.NET中的BinaryFormatter类序列化的文件的兼容性。

(很抱歉在这里写这个,我没有足够的代表来添加评论或类似的东西)