是否可以使用协议缓冲区序列化System.Object对象的列表

托马斯·瓦莱克(Tomas Walek)

我有各种数据类型(DateTime,int,十进制,字符串)的对象列表。

List<object> myObjects = new List<object>();
myObjects.Add(3);
myObjects.Add(3.9m);
myObjects.Add(DateTime.Now);
myObjects.Add("HELLO");

我可以使用protobuf-net序列化此列表,但是反序列化始终会引发异常:“其他信息:不需要类型,并且不能推断出任何合同:System.Object”。

using (var ms = new MemoryStream())
{
    Serializer.Serialize(ms, list2);
    var bytes = ms.ToArray();
    ms.Position = 0;
    var clone = Serializer.Deserialize(typeof(List<object>), ms); //Throws exception
}

我没有任何明确的合同,我想这是问题所在吗?但是,我确实知道序列化对象的预期类型是什么,但是如何告诉protobuf-net?

安德烈·西弗里安

检查以下内容以了解为什么要这样做:

  1. 需要无参数的构造函数

  2. 为什么动态而不是对象不起作用

  3. 为什么DynamicType=true 不行

  4. protobuf-net的创建者对抽象基类和具体实现的需求

  5. 为什么没有对象的序列化器

抽象基础

    [ProtoContract]
    [ProtoInclude (1, typeof(ObjectWrapper<int>))]
    [ProtoInclude(2, typeof(ObjectWrapper<decimal>))]
    [ProtoInclude(3, typeof(ObjectWrapper<DateTime>))]
    [ProtoInclude(4, typeof(ObjectWrapper<string>))]
    abstract class ObjectWrapper {
        protected ObjectWrapper() {}
        abstract public object ObjectValue { get; set; }
    }

执行

    [ProtoContract()]
    class ObjectWrapper<T> : ObjectWrapper
    {
        public ObjectWrapper(): base() { }
        public ObjectWrapper(T t) { this.Value = t; }

        [ProtoIgnore()]
        public override object ObjectValue
        {
            get { return Value; }
            set { Value = (T)value; }
        }

        [ProtoMember(1)]
        public T Value { get; set; }
    }

测试

        var myObjects = new List<ObjectWrapper>();
        myObjects.Add(new ObjectWrapper<int>(3));
        myObjects.Add(new ObjectWrapper<decimal>(3.9m));
        myObjects.Add(new ObjectWrapper<DateTime> (DateTime.Now));
        myObjects.Add(new ObjectWrapper<string> ("HELLO"));
        var clone = Serializer.DeepClone(myObjects);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java协议缓冲区是否可以在重复字段的列表获取器上返回null?

来自分类Dev

是否可以使用Json.Net以不同于序列化的方式序列化对象?

来自分类Dev

是否可以使用JMS序列化器将数组序列化到对象的根?

来自分类Dev

使用协议缓冲区序列化日期

来自分类Dev

是否可以将索引缓冲区对象(IBO)与功能'glMultiDrawElements'一起使用?

来自分类Dev

使用boost缓冲区进行序列化并使用UDP协议发送

来自分类Dev

使用标头和重复字段反序列化流式协议缓冲区消息

来自分类Dev

使用对象列表反/序列化

来自分类Dev

我是否需要删除传递给 google 协议缓冲区(protobuf)的对象?

来自分类Dev

序列化对象列表

来自分类Dev

序列化对象列表

来自分类Dev

发送带有协议缓冲区的已定义对象列表

来自分类Dev

序列化对象中的对象列表

来自分类Dev

序列化包含对象列表的对象

来自分类Dev

是否需要序列化对象以使用@RequestBody @ResponseBody批注

来自分类Dev

是否可以序列化System.Text.Json中列表成员的派生属性?

来自分类Dev

使用 Vader 测试缓冲区列表

来自分类Dev

不推荐使用GSON。我们可以使用哪一个来对Java对象与JSON进行序列化和反序列化?

来自分类Dev

如何使用System.Runtime.Serialization.Json序列化对象列表?

来自分类Dev

协议缓冲区NET以序列化SortedDictionary <CustomTKey,CustomTValue>?

来自分类Dev

协议缓冲区SerializeToArray:如何查找已序列化的结构

来自分类Dev

InvalidArgumentError:无法序列化 tensorflow.GraphDef 类型的协议缓冲区

来自分类Dev

是否可以序列化Ace Session对象?

来自分类Dev

是否可以在asp.net中序列化/反序列化Session对象

来自分类Dev

使用Json.NET序列化对象列表

来自分类Dev

使用protobuf反序列化对象列表

来自分类Dev

使用可空嵌套列表序列化对象

来自分类Dev

使用Json.NET序列化对象列表

来自分类Dev

使用可空嵌套列表序列化对象

Related 相关文章

  1. 1

    Java协议缓冲区是否可以在重复字段的列表获取器上返回null?

  2. 2

    是否可以使用Json.Net以不同于序列化的方式序列化对象?

  3. 3

    是否可以使用JMS序列化器将数组序列化到对象的根?

  4. 4

    使用协议缓冲区序列化日期

  5. 5

    是否可以将索引缓冲区对象(IBO)与功能'glMultiDrawElements'一起使用?

  6. 6

    使用boost缓冲区进行序列化并使用UDP协议发送

  7. 7

    使用标头和重复字段反序列化流式协议缓冲区消息

  8. 8

    使用对象列表反/序列化

  9. 9

    我是否需要删除传递给 google 协议缓冲区(protobuf)的对象?

  10. 10

    序列化对象列表

  11. 11

    序列化对象列表

  12. 12

    发送带有协议缓冲区的已定义对象列表

  13. 13

    序列化对象中的对象列表

  14. 14

    序列化包含对象列表的对象

  15. 15

    是否需要序列化对象以使用@RequestBody @ResponseBody批注

  16. 16

    是否可以序列化System.Text.Json中列表成员的派生属性?

  17. 17

    使用 Vader 测试缓冲区列表

  18. 18

    不推荐使用GSON。我们可以使用哪一个来对Java对象与JSON进行序列化和反序列化?

  19. 19

    如何使用System.Runtime.Serialization.Json序列化对象列表?

  20. 20

    协议缓冲区NET以序列化SortedDictionary <CustomTKey,CustomTValue>?

  21. 21

    协议缓冲区SerializeToArray:如何查找已序列化的结构

  22. 22

    InvalidArgumentError:无法序列化 tensorflow.GraphDef 类型的协议缓冲区

  23. 23

    是否可以序列化Ace Session对象?

  24. 24

    是否可以在asp.net中序列化/反序列化Session对象

  25. 25

    使用Json.NET序列化对象列表

  26. 26

    使用protobuf反序列化对象列表

  27. 27

    使用可空嵌套列表序列化对象

  28. 28

    使用Json.NET序列化对象列表

  29. 29

    使用可空嵌套列表序列化对象

热门标签

归档