[英]Serialization of generic collections in protobuf-net
我正在尝试使用 protobuf-net 序列化字典,但仍然收到“意外的子类型:”通用列表异常。
这就是我构造字典的方式:
var list = new List<DummyObject1>();
list.Add(new DummyObject1());
var dict = new Dictionary<string, object>();
dict["0"] = new DummyObject1();
dict["1"] = new DummyObject1();
dict["2"] = list;
我将类型添加到默认模型中
model.Add(typeof(object), true);
model.Add(typeof (DummyObject1), true);
有没有针对这种情况的解决方案或解决方法?
编辑:我用这样的解决方法让它工作;
首先我为 List 写了一个包装类
public class ListWrapper
{
public List<object> Items { get; set; }
}
我注册了类型和项目字段
ProtoBuf.Meta.RuntimeTypeModel.Default.Add(typeof(ListWrapper));
ProtoBuf.Meta.RuntimeTypeModel.Default[typeof(ListWrapper)].AddField(1, "Items");
现在我可以序列化和反序列化字典
var dict = new Dictionary<string, object>();
dict["0"] = new DummyObject1();
var lw = new ListWrapper { Items = new List<object> { new DummyObject1() } };
dict["2"] = lw;
using (var stream = new MemoryStream())
{
Serializer.Serialize(stream, dict);
stream.Seek(0, SeekOrigin.Begin);
var req = Serializer.Deserialize<Dictionary<string, object>>(stream);
}
很简单,protobuf-net 不能很好地与object
,并且总是会与(例如) Dictionary<string,object>
斗争。 这不是受支持的用例,因为 google protobuf 规范期望数据端到端地遵循单个合同。 对于某些继承场景,我可以欺骗它,但是object
太模糊了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.