快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

和记娱h188下载app:WCF中的自定义集合



WCF Tips之一

聚拢元素类的定义如下:

public enum FileType

{

TXT,DOC,HTML,OTHER

}

[DataContract]

public class Document

{

private string m_localPath;

private string m_fileName;

private FileType m_fileType;

[DataMember]

public string LocalPath

{

get { return m_localPath; }

set { m_localPath = value; }

}

[DataMember]

public string FileName

{

get { return m_fileName; }

set { m_fileName = value; }

}

[DataMember]

public FileType FileType

{

get { return m_fileType; }

set { m_fileType = value; }

}

}

自定义聚拢DocumentList则实现了IList接口:

//which attribute should be applied here?

public class DocumentList:IList

{

private IList m_list = null;

public DocumentList()

{

m_list = new List();

}

#region IList Members

public int IndexOf(Document item)

{

return m_list.IndexOf(item);

}

public void Insert(int index, Document item)

{

m_list.Insert(index,item);

}

public void RemoveAt(int index)

{

m_list.RemoveAt(index);

}

public Document this[int index]

{

get

{

return m_list[index];

}

set

{

m_list[index] = value;

}

}

#endregion

#region ICollect和记娱h188下载appion Members

public void Add(Document item)

{

m_list.Add(item);

}

public void Clear()

{

m_list.Clear();

}

public bool Contains(Document item)

{

return m_list.Contains(item);

}

public void CopyTo(Document[] array, int arrayIndex)

{

m_list.CopyTo(array,arrayIndex);

}

public int Count

{

get { return m_list.Count; }

}

public bo和记娱h188下载appol IsReadOnly

{

get { return m_list.IsReadOnly; }

}

public boo和记娱h188下载appl Remove(Document item)

{

return m_list.Remove(item);

}

#endregion

#region IEnumerable Members

public IEnumerator GetEnumerator()

{

return m_list.GetEnumerator();

}

#endregion

#region IEnumerable Members

IEnumerator IEnumerable.GetEnumerator()

{

return ((IEnumerable)m_list).GetEnumerator();

}

#endregion

}

留意,对付自定义聚拢DocumentList而言,我们不能利用[DataContract]特点,否则会在办事操作中无法返回精确的DocumentList工具。例如如下的办事操作定义,实际上无法得到精确的DocumentList值:

[OperationContract]

[FaultContract(typeof(DirectoryNotFoundException))]

Doc和记娱h188下载appume和记娱h188下载appntList FetchDocuments(string homeDir);

我们应该为DocumentList施加[CollectionDataContract]或者[Serializable],建议采纳前者。由于对付自定义聚拢而言,假如是泛型聚拢,还可以使用Name属性拟订导出元数据天生的类型名。不过,对付本例的聚拢而言,因为没有泛型参数,则无所谓了。为了在导出元数据时识别聚拢的元素Document类型,当然,还必要施加KnowTypeAttribute,着末的定义改动如下:

[KnownType(typeof(Document))]

[CollectionDataContract]

[Serializable]

public class DocumentList:IList

{}

此时,客户端利用法度榜样可以直接应用数据左券,仍旧能够识别。

您可能还会对下面的文章感兴趣: