在WCF中命名泛型集合

时间:2012-04-23 16:34:05

标签: c# wcf collections named

我正在使用第三方框架,该框架从自定义语言生成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属性来命名节点。但是,我处于不能真正改变生成类的结构的位置(因为它是在第三方框架中完成的),但我只能编辑上面的方法。

有可能吗?

1 个答案:

答案 0 :(得分: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;
        }
    }