繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM