序列化实现List <t>的类,用于通过WCF进行传输</t>

时间:2011-04-20 01:57:46

标签: wcf class serialization collections inheritance

我花了一些时间为我的应用程序编写代码,假设序列化位是最容易的部分。几乎所有方面(客户端和服务器)都已完成,我需要做的就是将一个类AccountInfo从服务传递到客户端...
问题是AccountInfo继承了List,因此[DataContract]属性不是有效。
我尝试使用[CollectionDataContract]属性,但是另一方(客户端)接收的类只包含通用的List方法而没有我的自定义实现属性,例如GroupTitle ...

我已经找到了解决这个问题的方法,但我不知道如何应用它。
基本上当我创建一个属性而不是继承List但是我不能将这个类绑定到LongListSelector(WP7)时,一切都有效,因为它不是一个集合类型。 我有三节课。
包含以下多个实例的AccountInfo:
AccountInfoGroup包含多个实例:
AccountInfoEntry(这个不继承列表因此序列化并且可以访问所有属性都没有问题。)

有人可以帮我使用正确的属性来使用WCF方法序列化和传输这些类吗?


以下是其中2个集合类的代码:

public class AccountInfo : List<AccountInfoGroup>
    {
        public AccountInfo()
        {
            UpdateTime = DateTime.UtcNow;
            EntryID = Guid.NewGuid();
        }

        public bool HasItems
        {
            get
            {
                return (Count != 0);
            }
            private set
            {
            }
        }
        public Guid EntryID
        {
            get;
            set;
        }
        public decimal GetTotalCredit()
        {
            decimal credit = 0;
            foreach (AccountInfoGroup acg in this.Where(item => item.Class == AccountInfoEntry.EntryType.Credit))
            {
                acg.Where(item => item.ItemClass == AccountInfoEntry.EntryType.Credit).ToList().ForEach(entry => 
                { credit += entry.Remaining; }
                );
            }
            return credit;
        }
        public bool UsedForCreditComparison = false;
        public DateTime UpdateTime { get; private set; }
    }

    public class AccountInfoGroup : List<AccountInfoEntry>
    {
        public AccountInfoEntry.EntryType Class 
        {
            get;
            private set;
       }
        public string Title
        {
            get
            {
                return AccountInfoEntry.ClassToString(Class);
            }
        }

        public AccountInfoGroup(AccountInfoEntry.EntryType groupClass)
        {
            this.@Class = groupClass;
        }

        public bool HasItems
        {
            get
            {
                return (Count != 0);
            }
            private set
            {
            }
        }
    }


感谢您的任何建议...... :)

1 个答案:

答案 0 :(得分:0)

您的样本对于序列化中的WCF非常痛苦。 我建议您修改并为WCF消息设置一个通用模型(这意味着它只包含具有getter和setter,序列化属性的属性)。

如果WP7中的LongListSelector绑定存在问题,您可能希望将消息转换为WP7对象支持在绑定中使用的实际类型。