0

List<T>在创建继承自或ICollection<T>具有其他自定义属性的自定义集合时,我知道该问题:

public class MyCollection: List<int>
{
    public string MyCustomProperty { get; set; }
}

据我所知,这样的集合将通过 throw WCF 作为 ArrayOfInt 并且 WCF 不会序列化我的自定义属性。解决方案是创建将管理内部集合并具有自定义属性的包装类。

我想为我的需要制定一个更好的解决方法……IEnumerable<T>会遇到同样的问题吗?

public class MyCollection: IEnumerable<int>
{
   /**************/
   /* Code that implements IEnumerable<int> and manages the internal List<T> */
   /* I know I will not able to cast it to List<T>, but I don't need it.  */
   /* If I will need it, I will implement cast operators later */
   /**************/

   public string MyCustomProperty { get; set; }
}

上面的类是否会通过 throw WCF 包含 MyCustomProperty 值?

谢谢

4

1 回答 1

1

我试过了,它没有序列化自定义属性。我刚刚从服务方法返回了整个类对象。结果仍然是 ArrayOfInt(我使用 List 作为容器)

public class MyExtension: IEnumerable<int>
{
    public string CustomString { get; set; }
    private List<int> lst = new List<int>(); 

    public void Add(int i)
    {
        lst.Add(i);
    }

    public IEnumerator<int> GetEnumerator()
    {
        return lst.GetEnumerator();
    }

    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
    {
        return lst.GetEnumerator();
    }
}

我必须将其标记为 DataContract 并将每个成员标记为 DataMember 才能序列化所有属性。

<MyExtension xmlns="http://schemas.datacontract.org/2004/07/GetRequestTest"     xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
 <CustomString>sunny</CustomString> 
 <lst xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
    <a:int>1</a:int> 
 </lst>
</MyExtension>
于 2013-06-27T03:32:24.377 回答