.net ASMXWeb服务响应中XML元素的顺序随构建它的PC而变化

.net ASMXWeb服务响应中XML元素的顺序随构建它的PC而变化,.net,web-services,entity-framework-4,.net-4.0,asmx,.net,Web Services,Entity Framework 4,.net 4.0,Asmx,在ASMX web服务中,GetProductListModulesOnPage方法返回ProductListModule对象的列表。ProductListModule类来自两个来源: 实体框架4实体(使用POCO模板生成) 添加单个额外属性的分部类声明,如下所示: 公共部分类ProductListModule{ 公共布尔值未激活{get;set;} } 问题在于,IsNotActivated元素在web服务响应中的位置根据构建项目的机器的不同而不同。在同事的电脑上,它显示在最上方,而在我的电脑

在ASMX web服务中,GetProductListModulesOnPage方法返回ProductListModule对象的列表。ProductListModule类来自两个来源:

  • 实体框架4实体(使用POCO模板生成)
  • 添加单个额外属性的分部类声明,如下所示:

    公共部分类ProductListModule{
    公共布尔值未激活{get;set;}
    }

  • 问题在于,IsNotActivated元素在web服务响应中的位置根据构建项目的机器的不同而不同。在同事的电脑上,它显示在最上方,而在我的电脑上,它显示在最下方,如下所示:

    <?xml version="1.0" encoding="utf-8"?>
    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
        <GetProductListModulesOnPageResponse xmlns="http://ecommerce.company.co.uk/">
          <GetProductListModulesOnPageResult>
            <ProductListModule>
              <ListPageTabID>364</ListPageTabID>
              <ListPageModuleID>872</ListPageModuleID>
              <ListPageCategoryID>107</ListPageCategoryID>
              <ProductCategory>
                <CategoryID>107</CategoryID>
                <CategoryName>Buff</CategoryName>
                <ParentCategoryID>343</ParentCategoryID>
                <Archived>false</Archived>
              </ProductCategory>
              <IsNotActivated>false</IsNotActivated>
            </ProductListModule>
          </GetProductListModulesOnPageResult>
          <Success>true</Success>
          <Message />
        </GetProductListModulesOnPageResponse>
      </soap:Body>
    </soap:Envelope>
    
    
    364
    872
    107
    107
    浅黄色
    343
    错误的
    错误的
    符合事实的
    
    如果位置更改(并且服务引用未刷新),则web服务客户端 无法解释响应并引发异常

    我们看不出进行构建的机器之间有什么不同(相同的VS版本,相同的EF版本),我们都使用完全相同的源代码

    我们还尝试通过向IsNotActivated属性添加以下属性来控制序列化顺序,但没有效果

    [System.Runtime.Serialization.DataMemberAttribute(IsRequired=true,Order=1)]

    PS-建议转换为WCF没有意义

    根据,将
    [DataMember(Order=1)]
    放在分部类上实际上可能会将其移动到EF内容之后。没有
    顺序的成员将按字母顺序排在第一位。