这可能是一件容易的事情,但我还没有找到一种有效的方法。
我有一个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;
}
}
}
答案 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使用了代理类