从XMLHTTPPOST请求检索WCF中的内部XML
本文关键字:内部 XML WCF XMLHTTPPOST 请求 检索 | 更新日期: 2023-09-27 18:29:09
大家好,
通过以下主题解决问题后,我可以向WCF发送XMLHTTPPOST请求:在WCF 中处理来自XMLHTTP的POST请求
但现在,我仍在努力寻找从请求中检索内部XML的正确方法。我以XML形式发送请求:
<?xml version=""1.0"" encoding=""UTF-8"" standalone= ""yes""?><AFISQuery transid=""3356434""><Request CIFNO =""1234567890123456789"" IC= ""770707-07-7777"">TEST</Request></AFISQuery>
在AFISQuery类中,我将其设置为:
[DataContract(Namespace = "")]
public class AFISQuery
{
public AFISQuery(string transid)
{
this.transid = transid;
}
[DataMember]
public string Request { get; set; }
[DataMember]
public string transid { get; set; }
}
因此,我可以获得请求信息("TEST"),但无法获得transid信息。我试着浏览了一下论坛,但没有发现类似的问题。
我的问题是,是否可以从请求的内部XML中检索信息?例如,他们是CIFNo、transid和ICNo。
提前感谢:)
之所以能够检索Request,是因为Request是一个XML元素。XML元素直接映射到DataMembers,因此,Request被正确地反序列化为AFISQuery数据协定类型上的Request DataMember。
transid的问题在于它是一个属性。DataContractSerializer不支持属性,也不能以任何方式支持它们。您需要更改请求XML,使其将transid作为一个元素,就像request是一个元素一样。
还要注意的是,即使Request现在为您设置了一个值,XML中"Request"元素的属性也会被完全忽略。你可能同意,也可能不同意。
如果您关心属性,或者确实希望支持可序列化成员作为属性,则可能需要从DataContractSerializer切换到XmlSerializer。这很容易做到,只需使用[XmlSerializerFormat.]