在WCF中发送自己的数据集合

时间:2010-08-05 21:18:16

标签: c# wcf datacontract

我有自己的收藏品DataContracts:

    [DataContract]
public class DzieckoAndOpiekun
{
    public DzieckoAndOpiekun() { }
    public DzieckoAndOpiekun(string dzImie, string dzNazwisko, string opImie, string opNazwisko)
    {
        this.DzieckoImie = dzImie;
        this.DzieckoImie = dzNazwisko;
        this.OpiekunImie = opImie;
        this.OpiekunNazwisko = opNazwisko;
    }

    /// <summary>
    /// Field for Dziecko's Surname
    /// </summary>
    private string dzieckoNazwisko;

    /// <summary>
    /// Field for Dziecko's Name
    /// </summary>
    private string dzieckoImie;

    /// <summary>
    /// Field for Opiekun's Surname
    /// </summary>
    private string opiekunNazwisko;

    /// <summary>
    /// Field for Opiekun's Name
    /// </summary>
    private string opiekunImie;

    /// <summary>
    /// Gets or sets the dziecko nazwisko.
    /// </summary>
    /// <value>The dziecko nazwisko.</value>
    [DataMember]
    public virtual string DzieckoNazwisko
    {
        get { return this.dzieckoNazwisko; }
        set { this.dzieckoNazwisko = value; }
    }

    /// <summary>
    /// Gets or sets the dziecko imie.
    /// </summary>
    /// <value>The dziecko imie.</value>
    [DataMember]
    public virtual string DzieckoImie
    {
        get { return this.dzieckoImie; }
        set { this.dzieckoImie = value; }
    }

    /// <summary>
    /// Gets or sets the opiekun nazwisko.
    /// </summary>
    /// <value>The opiekun nazwisko.</value>
    [DataMember]
    public virtual string OpiekunNazwisko
    {
        get { return this.opiekunNazwisko; }
        set { this.opiekunNazwisko = value; }
    }

    /// <summary>
    /// Gets or sets the opiekun imie.
    /// </summary>
    /// <value>The opiekun imie.</value>
    [DataMember]
    public virtual string OpiekunImie
    {
        get { return this.opiekunImie; }
        set { this.opiekunImie = value; }
    }
}

[DataContract]
public class DzieckoAndOpiekunCollection : IEnumerable<DzieckoAndOpiekun>, IList<DzieckoAndOpiekun>
{
    [DataMember]
    List<DzieckoAndOpiekun> collection = new List<DzieckoAndOpiekun>();

    [DataMember]
    public List<DzieckoAndOpiekun> Collection
    {
        get { return collection; }
        set { collection = value; }
    }

    public IEnumerator<DzieckoAndOpiekun> GetEnumerator()
    {
        return collection.GetEnumerator();
    }

    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
    {
        throw new System.NotImplementedException();
    }

    public int IndexOf(DzieckoAndOpiekun item)
    {
        return collection.IndexOf(item);
    }

    public void Insert(int index, DzieckoAndOpiekun item)
    {
        collection.Insert(index, item);
    }

    public void RemoveAt(int index)
    {
        collection.RemoveAt(index);
    }

    public DzieckoAndOpiekun this[int index]
    {
        get
        {
            return collection[index];
        }
        set
        {
            collection[index] = value;
        }
    }

    public void Add(DzieckoAndOpiekun item)
    {
        this.collection.Add(item);
    }

    public void AddRange(IList<DzieckoAndOpiekun> collection)
    {
        this.collection.AddRange(collection);
    }

    public void Clear()
    {
        collection.Clear();
    }

    public bool Contains(DzieckoAndOpiekun item)
    {
        return collection.Contains(item);
    }

    public void CopyTo(DzieckoAndOpiekun[] array, int arrayIndex)
    {
        this.collection.CopyTo(array, arrayIndex);
    }

    public int Count
    {
        get { return this.collection.Count; }
    }

    public bool IsReadOnly
    {
        get { return false; }
    }

    public bool Remove(DzieckoAndOpiekun item)
    {
        return this.collection.Remove(item);
    }
}

并在我的ServiceContract实现中使用它:

 public DzieckoAndOpiekunCollection GetChildAndOpiekunByFirstnameLastname(string firstname, string lastname)
    {
        DataTransfer.ChargeInSchoolEntities db = new DataTransfer.ChargeInSchoolEntities();
        DzieckoAndOpiekunCollection result = new DzieckoAndOpiekunCollection();
        if (firstname == null && lastname != null)
        {
            IQueryable<DzieckoAndOpiekun> resultV = from p in db.Dziecko
                                                    where lastname == p.Nazwisko
                                                    select new DzieckoAndOpiekun(
                                                   p.Imie,
                                                   p.Nazwisko,
                                                   p.Opiekun.Imie,
                                                   p.Opiekun.Nazwisko);
            List<DzieckoAndOpiekun> l = resultV.ToList();
            result.AddRange(l);
        }
        if (firstname != null && lastname != null)
        {
            IQueryable<DzieckoAndOpiekun> resultV = from p in db.Dziecko
                                                    where firstname == p.Imie && lastname == p.Nazwisko
                                                    select new DzieckoAndOpiekun(
                                                   p.Imie,
                                                   p.Nazwisko,
                                                   p.Opiekun.Imie,
                                                   p.Opiekun.Nazwisko);
            List<DzieckoAndOpiekun> l = resultV.ToList();
            result.AddRange(l);
        }
        if (firstname != null && lastname == null)
        {
            IQueryable<DzieckoAndOpiekun> resultV = from p in db.Dziecko
                                                    where firstname == p.Imie
                                                    select new DzieckoAndOpiekun(
                                                   p.Imie,
                                                   p.Nazwisko,
                                                   p.Opiekun.Imie,
                                                   p.Opiekun.Nazwisko);
            List<DzieckoAndOpiekun> l = resultV.ToList();
            result.AddRange(l);
        }
        return result;
    }

创建自己的数据合同并发送它有什么问题吗?我问因为我在使用方法时遇到错误:/:

  
    

操作期间发生异常,导致结果无效。     检查InnerException是否有异常     细节。        在     System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary()       在     SecretaryAppNav.ClientService.GetChildAndOpiekunByFirstnameLastnameCompletedEventArgs.get_Result()at     SecretaryAppNav.Views.FindChild.Client_GetChildAndOpiekunByFirstnameLastnameCompleted(对象     发件人,     GetChildAndOpiekunByFirstnameLastnameCompletedEventArgs     E)
    at SecretaryAppNav.ClientService.Service1Client.OnGetChildAndOpiekunByFirstnameLastnameCompleted(Object     状态)

  

2 个答案:

答案 0 :(得分:2)

我不能保证这会起作用,但是你要两次发送这个集合:

[DataContract]
public class DzieckoAndOpiekunCollection : 
    IEnumerable<DzieckoAndOpiekun>, IList<DzieckoAndOpiekun>
{
    [DataMember]
    List<DzieckoAndOpiekun> collection = new List<DzieckoAndOpiekun>();

    [DataMember]
    public List<DzieckoAndOpiekun> Collection
    {
        get { return collection; }
        set { collection = value; }
    }
...

您可能只应将DataMember属性放在字段或属性上,而不是两者都放置,因为它们暴露相同的值。

答案 1 :(得分:0)

我用CollectionDataContract属性解决问题;)