更改WebService方法的结果名称

问题描述 投票:2回答:3

这可能是一件很简单的事情,但我还没有找到可行的方法。

我有一个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;
    }
  }
}
c# web-services asmx
3个回答
4
投票

通常情况下,使用一个 XmlElementAttribute 将允许您重新定义序列化元素的名称。然而,在ASMX Web服务中,这似乎并不奏效。然而,通过在WebMethod上使用一个属性,我能够产生你正在寻找的行为。试试这个。

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

1
投票

你需要的是添加XmlRoot声明,像这样。

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

0
投票

我解决了类似的问题,我修改了WSDL并删除了结果元素,然后用wsdl.exe生成代理类,并将代理类用于我的ASMX。

© www.soinside.com 2019 - 2024. All rights reserved.