protobuf-net中泛型集合的序列化

本文关键字:序列化 集合 泛型 protobuf-net | 更新日期: 2023-09-27 17:53:48

我试图用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; }
        }

,我注册了type和Items字段

        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中泛型集合的序列化

很简单,protobuf-net不能很好地与object配合,并且总是与(例如)Dictionary<string,object>作斗争。这不是一个受支持的用例,因为google protobuf规范希望数据遵循端到端的单一契约。我可以欺骗周围的一些继承场景,但object只是太模糊