更改WebService方法结果名称

时间:2011-04-26 19:34:03

标签: c# web-services asmx

这可能是一件容易的事情,但我还没有找到一种有效的方法。

我有一个C#网络服务,目前有这样的输出:

<GetInformationResponse>
  <GetInformationResult>
    <Policy>
    </Policy>
  </GetInformationResult>
<GetInformationResponse>

我需要的是这样输出:

<GetInformationResponse>
  <InformationResponse>
    <Policy>
    </Policy>
  </InformationResponse>
<GetInformationResponse>

我尝试将所有内容包装在“InformationResponse”对象中,但我仍然使用“GetInformationResult”对象封装它。我基本上需要将“GetInformationResult”重命名为“InformationResponse”。

谢谢!

ETA:对象/方法信息

[WebMethod]
public InformationResponse GetInformation(GetInformationRequest GetInformationRequest)
{
  InformationResponse infoSummary = new InformationResponse();
  Policy policy = new Policy();
  // setting values

  return infoSummary;
}

InformationResponse对象:

[System.Xml.Serialization.XmlInclude(typeof(Policy))]
public class InformationResponse : List<Policy>
{
  private Policy policyField;

  /// <remarks/>
  [System.Xml.Serialization.XmlElementAttribute("Policy", Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
  public Policy Policy
  {
    get
    {
        return this.policyField;
    }
    set
    {
        this.policyField = value;
    }
  }
}

3 个答案:

答案 0 :(得分:4)

通常,使用XmlElementAttribute将允许您重新定义序列化元素的名称。但是,在ASMX Web服务中,这似乎不起作用。但是,通过在WebMethod上使用属性,我能够生成您正在寻找的行为。试试这个:

[WebMethod]
[return: System.Xml.Serialization.XmlElementAttribute("InformationResponse")]
public InformationResponse GetInformation(GetInformationRequest GetInformationRequest)
{  
   ....
}

答案 1 :(得分:1)

您需要的是添加如下的XmlRoot声明:

[XmlRoot("MyName")]
public class MyName
{}

答案 2 :(得分:0)

我解决了类似的问题,我修改了WSDL并删除了result元素,然后使用wsdl.exe生成了代理类,并为我的ASMX使用了代理类