好的,我会尝试更清楚地解释我尝试的内容here
据我所知,protobuf是一种适用于已知类型的协议,您可以序列化包含您也知道的数据的给定类型的对象。
我真的想知道Marc的实现是否有办法序列化[ProtoMember]
类型的object
,这可能指向基本类型的实例或已经由库管理的集合
看起来不是,但我有点沮丧,因为我觉得Marc的图书馆可以做到这一点,考虑到它已经在做的所有反射/生成的东西。
它不完全符合协议,但我不在乎,因为我在两端使用相同的库以紧密的方式。
我确实需要序列化来自Dictionary<int, string>
ProtoMember
Object
的{{1}}。
答案 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类序列化的文件的兼容性。
(很抱歉在这里写这个,我没有足够的代表来添加评论或类似的东西)