【发布时间】:2011-11-22 08:59:27
【问题描述】:
如何使用 protobuf-net 序列化这样的对象:
public class MyObject{
public string Key {get; set;}
public List<Object> Values {get; set;}
}
当我尝试使用 TypeModel protobuf-net 对其进行序列化时,会抛出一个错误,指出它不知道如何序列化 System.Object。现在我知道 Values 只会包含原语(int、string、float、DateTime 等)。那么如何让 protobuf-net 知道这件事呢?
【问题讨论】:
-
不过,它是可序列化的。
-
我不知道 protobuf,但你对序列化程序的要求非常高。
-
.NET DataContract 可以很好地序列化它......是的,DateTime 在.NET 中有一种奇怪的半原始状态。例如,int?是有效的和 MyObject?不是,因为 MyObject 不是原始的,但是 DateTime?是完全有效的。所以不,也许不是原语,但它是一个值类型,它是内置的,可序列化的。
-
请注意,所有
structs 都是ValueType,因为int只是struct System.Int32.... 考虑代码(42).GetType().BaseType和var v = new List<ValueType>() { 1, Guid.NewGuid() }。但是,即使我觉得它很有趣,这可能根本无法解决手头的问题(它将类型限制为struct,而不是“支持的可序列化类型”):)“问题”是protobuf-net 只知道如何序列化/编码非常有限的类型子集(而 DCS 和 XmlSerializer 更健壮)。 -
我认为这实际上可能是一个更根本的问题:除非我弄错了,否则协议缓冲区只支持同构列表..?
标签: c# protobuf-net