0

カスタム言語から WCF サービスを生成するサード パーティのフレームワークを使用しています。ただし、コレクション クラスを使用する場合は、次のような出力が生成されます。

namespace MyNameSpace
{
    using System;
    using System.ServiceModel;

    [MessageContract]
    public class FindSomethingResponse
    {
        [MessageBodyMember(Order=1)]
        public System.Collections.Generic.List<SomethingDC> response;
    }
}

これは問題ありませんが、サービスを利用するときに望ましくない結果を引き起こします。これは、上記が生成する XSD です。

<FindSomethingResponse>
    <ArrayOfSomethingDC>
        <SomethingDC/>
        <SomethingDC/>
        <SomethingDC/>
        ...
    </ArrayOfSomethingDC>
</FindSomethingResponse

「グループ ノード」は ArrayOfSomethingDC と呼ばれますが、もっと意味のある名前 (「Somethings」など) を使用したいと思います。

私が見つけた限りでは、 CollectionDataContract 属性を使用してノードに名前を付ける必要があります。ただし、生成されたクラスの構造を実際に変更することはできません(サードパーティのフレームワークで行われるため)が、上記のメソッドのみを編集できます。

どんな方法でも可能ですか?

4

1 に答える 1

0

以下のようにしてみてください

   namespace MyNameSpace
    {
        using System;
        using System.ServiceModel;

        [CollectionDataContract(Name = "Somethings", ItemName = "SomethingDC")]
        public class CustomList<T> : List<T>
        {
            public CustomList()
                : base()
            {
            }

            public CustomList(T[] items)
                : base()
            {
                foreach (T item in items)
                {
                    Add(item);
                }
            }
        }


        [MessageContract]
        public class FindSomethingResponse
        {
            [MessageBodyMember(Order = 1)]
            public CustomList<SomethingDC> response;
        }
    }
于 2012-04-23T17:09:00.037 に答える