这可能是一件很简单的事情,但我还没有找到可行的方法。
我有一个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;
}
}
}
通常情况下,使用一个 XmlElementAttribute
将允许您重新定义序列化元素的名称。然而,在ASMX Web服务中,这似乎并不奏效。然而,通过在WebMethod上使用一个属性,我能够产生你正在寻找的行为。试试这个。
[WebMethod]
[return: System.Xml.Serialization.XmlElementAttribute("InformationResponse")]
public InformationResponse GetInformation(GetInformationRequest GetInformationRequest)
{
....
}
你需要的是添加XmlRoot声明,像这样。
[XmlRoot("MyName")]
public class MyName
{}
我解决了类似的问题,我修改了WSDL并删除了结果元素,然后用wsdl.exe生成代理类,并将代理类用于我的ASMX。