【问题标题】:Serializing a List<IComparable> member with protobuf-net使用 protobuf-net 序列化 List<IComparable> 成员
【发布时间】:2020-10-02 09:53:26
【问题描述】:

我正在尝试使用protobuf-net 序列化现有的遗留类:

using ProtoBuf;
using System;
using System.Collections.Generic;

[ProtoContract]
public class AttributeValue {

    List<IComparable> attributeValues;

    [ProtoMember(1)]
    public List<IComparable> Values {
        get {
            return this.attributeValues;
        }
    }
}

我得到一个例外说No serializer for type System.IComparable is available for model (default)
查看一些示例,我发现应该在 ProtoMember 属性中添加 DynamicType = true 属性,但现在已弃用。
有没有另一种方法来序列化和反序列化具有这样声明的成员的类?

【问题讨论】:

  • 我认为您应该在指定可能的具体类型时使用ProtoInclude 属性。
  • 我试过了,但是ProtoInclude属性不能用于成员,只能用于类。

标签: c# protobuf-net


【解决方案1】:

不,从根本上说。 Protobuf 的前提是知道你在序列化/反序列化什么你做之前,如果你只知道objectIComparable,这是不可能的。

我上周在a GitHub issue here 中更详细地谈到了这种情况,包括关于如果是我将如何表示这种情况的建议,这实际上归结为“作为我期望的实际类型的有区别的联合”。我还将创建一个单独的 DTO 模型,并将 that 序列化,而不是尝试序列化我预先存在的类型 - 然后在它们之间进行映射。

【讨论】:

  • 非常感谢您的回答,我会尽量想出最不痛苦的方式来重构我的代码 :) 这是我试图尽可能少接触的遗留问题,但序列化使用标准二进制序列化程序处理大量数据占用了太多时间......
猜你喜欢
  • 2012-04-20
  • 1970-01-01
  • 2012-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多