【问题标题】:Cannot serialize this List<T> extension无法序列化此 List<T> 扩展
【发布时间】:2010-05-03 22:50:19
【问题描述】:

我正在尝试通过 WCF 推送数据集合的子集以供 WCF 使用 - 想想分页数据。因此,我希望这个集合包含一页的数据以及结果总数。我认为通过创建一个扩展 List 的自定义对象,这应该是微不足道的。但是,我所做的一切都会导致我的 TotalNumber 属性显示为 0。所有数据都可以很好地序列化/反序列化,但根本不会出现单个整数。

这是我第一次失败的尝试:

[Serializable]
public class PartialList<T> : List<T>
{
    public PartialList()
    {

    }

    public PartialList(IEnumerable<T> collection)
        : base(collection)
    {
    }

    [DataMember]
    public int UnpartialTotalCount { get; set; }

这是我第二次以完全相同的方式失败的尝试:

[Serializable]
public class PartialList<T> : List<T>, ISerializable
{
    public PartialList()
    {

    }

    public PartialList(IEnumerable<T> collection)
        : base(collection)
    {
    }

    [DataMember]
    public int UnpartialTotalCount { get; set; }

    protected PartialList(SerializationInfo info, StreamingContext context)
    {
        UnpartialTotalCount = info.GetInt32("UnpartialTotalCount");
    }

    public void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        info.AddValue("UnpartialTotalCount", UnpartialTotalCount);
    }

}

这里有什么问题??

【问题讨论】:

    标签: c# wcf serialization visual-studio-2010


    【解决方案1】:

    如果其他人发现此主题,&lt;DataContract&gt; 对自定义集合类型无效。

    您应该改用&lt;CollectionDataContract&gt;。它是一个类似的命名空间,具有相同的成员,但它能够处理自定义列表和字典。有关详细信息,请参阅本文中的“自定义集合”: http://msdn.microsoft.com/en-us/library/aa347850.aspx

    【讨论】:

      【解决方案2】:

      对于 WCF,您可能希望在类上使用 [DataContract] 属性,而不是 ISerializable 接口。 WCF 使用不同类型的序列化,以及标记应序列化的类和成员的不同约定。

      WCF 可能支持 [Serializable] 或 ISerializable,但我建议仅使用 [DataContract]/[DataMember]/等。 WCF 的约定。

      【讨论】:

      • [DataContract] 属性会导致运行时错误,表明它是不正确的集合。我不确定确切的错误,但我已经尝试过了。
      【解决方案3】:

      根据this question,这是“设计”。 :-(

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-15
        • 2012-12-01
        • 2011-09-09
        • 1970-01-01
        • 1970-01-01
        • 2011-10-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多