代码之家  ›  专栏  ›  技术社区  ›  Jaxidian

无法序列化此列表扩展名

  •  0
  • Jaxidian  · 技术社区  · 15 年前

    我试图通过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);
        }
    
    }
    

    怎么回事??

    3 回复  |  直到 14 年前
        1
  •  2
  •   JMPel    14 年前

    如果有人找到这个话题, <DataContract> 对自定义集合类型无效。

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

        2
  •  0
  •   Andy White    15 年前

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

    wcf可能支持[serializable]或iserializable,但我建议对wcf只使用[datacontract]/[datamember]/etc.约定。

        3
  •  0
  •   Community CDub    8 年前

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