0

List<T>追加のカスタム プロパティから継承する、またはICollection<T>追加のカスタム プロパティを使用してカスタム コレクションを作成する際の問題について認識しています。

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

私が知っているように、そのようなコレクションは ArrayOfInt としてスロー WCF に渡され、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; }
}

上記のクラスは 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 に答える