none
VS生成wcf代理代码时,在引用设置里面设置了LIST,但是生成的代码里面集合类型还是数组 RRS feed

  • 问题

  • 问题是这样的,项目已经跑了一年多了,代码一直在更新,我们用的集合类型都是List,而且一直没出问题。今天早上的时候,我打开vs,照常写了个新的接口,然后在客户端项目里面更新服务引用,突然提示我无法将List转为[],我就奇怪了,打开了服务引用的设置,里面的集合类型选的确实是List。然后我选成数组,更新,然后再选成List再更新,还是不行,依然是数组类型,然后我把服务引用删掉,再重新引用,依然不行,下面是我的svcmap。

    <?xml version="1.0" encoding="utf-8"?>
    <ReferenceGroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ID="29b09435-06c6-44e8-bb57-29a70369ca38" xmlns="urn:schemas-microsoft-com:xml-wcfservicemap">
      <ClientOptions>
        <GenerateAsynchronousMethods>false</GenerateAsynchronousMethods>
        <EnableDataBinding>true</EnableDataBinding>
        <ExcludedTypes />
        <ImportXmlTypes>false</ImportXmlTypes>
        <GenerateInternalTypes>false</GenerateInternalTypes>
        <GenerateMessageContracts>false</GenerateMessageContracts>
        <NamespaceMappings />
        <CollectionMappings>
          <CollectionMapping TypeName="System.Collections.Generic.List`1" Category="List" />
        </CollectionMappings>
        <GenerateSerializableTypes>true</GenerateSerializableTypes>
        <Serializer>Auto</Serializer>
        <UseSerializerForFaults>true</UseSerializerForFaults>
        <ReferenceAllAssemblies>false</ReferenceAllAssemblies>
        <ReferencedAssemblies />
        <ReferencedDataContractTypes />
        <ServiceContractMappings />
      </ClientOptions>
    其它无关代码……

    大神快点来啊~~~~

    更新:2015年08月28日 17:16:11:

    现在发现新的情况是,只要在参数或者返回值里面有DataTable类型,就会出现不论客户端vs里面设置服务引用的集合类型是List还是别的,最终都会是数组类型。但是,在今天以前,DataTable类型的参数一直存在,集合类型设为List一直有效 。为何现在就不行了呢,今天发生了什么?有DataTable的版本有没有关系啊,哪位大神给点建议。

    • 已编辑 EnSleeP 2015年8月28日 10:07 更新
    2015年8月28日 8:31

答案

  • 客户端添加 引用属性 有 高级设置 里面可以选择 集合类型

    默认是数组


    Frank Xu Lei--谦卑若愚,好学若饥
    [老徐的网站]:http://www.frankxulei.com/

    [老徐的博客]:http://54peixun.com/Author/frankxulei
    微软WCF中文技术论坛
    微软WCF英文技术论坛

    微软WCF技术群:166599314

    选择那个无效,我试过了,并上根据 我问题中的svcmap也可以看出,我在集合类型的地方选择的确实是LIST。

    我现在找到解决的办法了,原因是WCF的用的是4.5.1而我客户端的版本用的是4.0,WCF的参数中一旦有DATATABLE类型,就会有问题,导致所有的集合类型全部变成数组,而不管之前在设置中选择了什么。而如果客户端也使用4.5.1的版本,就不会出现这样的问题。所以,在【重新使用所引用的指定程序集中的类型】里面选择SYSTEM.DATA就OK了,本来想全部选中的,但是由于引用 的较多东西,出现了部分充突,所以只选择中了System.Data,然后问题解决。


    • 已标记为答案 EnSleeP 2015年8月28日 14:08
    2015年8月28日 14:08

全部回复

  • 客户端添加 引用属性 有 高级设置 里面可以选择 集合类型

    默认是数组


    Frank Xu Lei--谦卑若愚,好学若饥
    [老徐的网站]:http://www.frankxulei.com/

    [老徐的博客]:http://54peixun.com/Author/frankxulei
    微软WCF中文技术论坛
    微软WCF英文技术论坛

    微软WCF技术群:166599314

    2015年8月28日 11:53
    版主
  • 选择那个无效,我试过了,并上根据 我问题中的svcmap也可以看出,我在集合类型的地方选择的确实是LIST。

    我现在找到解决的办法了,原因是WCF的用的是4.5.1而我客户端的版本用的是4.0,WCF的参数中一旦有DATATABLE类型,就会有问题,导致所有的集合类型全部变成数组,而不管之前在设置中选择了什么。而如果客户端也使用4.5.1的版本,就不会出现这样的问题。所以,在【重新使用所引用的指定程序集中的类型】里面选择SYSTEM.DATA就OK了,本来想全部选中的,但是由于引用 的较多东西,出现了部分充突,所以只选择中了System.Data,然后问题解决。


    • 已编辑 EnSleeP 2015年8月28日 14:08
    2015年8月28日 14:08
  • 客户端添加 引用属性 有 高级设置 里面可以选择 集合类型

    默认是数组


    Frank Xu Lei--谦卑若愚,好学若饥
    [老徐的网站]:http://www.frankxulei.com/

    [老徐的博客]:http://54peixun.com/Author/frankxulei
    微软WCF中文技术论坛
    微软WCF英文技术论坛

    微软WCF技术群:166599314

    选择那个无效,我试过了,并上根据 我问题中的svcmap也可以看出,我在集合类型的地方选择的确实是LIST。

    我现在找到解决的办法了,原因是WCF的用的是4.5.1而我客户端的版本用的是4.0,WCF的参数中一旦有DATATABLE类型,就会有问题,导致所有的集合类型全部变成数组,而不管之前在设置中选择了什么。而如果客户端也使用4.5.1的版本,就不会出现这样的问题。所以,在【重新使用所引用的指定程序集中的类型】里面选择SYSTEM.DATA就OK了,本来想全部选中的,但是由于引用 的较多东西,出现了部分充突,所以只选择中了System.Data,然后问题解决。


    • 已标记为答案 EnSleeP 2015年8月28日 14:08
    2015年8月28日 14:08