大家好,大家好,
通过以下主题解决后,我能够将XML HTTP POST请求发送到WCF:Handle POST request from XML HTTP in WCF
但是现在,我仍在尝试找到从请求中检索内部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。
提前致谢:)
答案 0 :(得分:0)
您能够检索Request的原因是Request是XML元素。 XML元素直接映射到DataMembers,因此,Request会在AFISQuery数据协定类型的Request DataMember上正确反序列化。
'transid'的问题在于它是一个属性。 DataContractSerializer不支持属性,并且不能以任何方式支持它们。您需要更改您的请求XML,以便它作为元素进行转换,就像Request是一个元素一样。
另请注意,即使现在将Request设置为某个值,您所拥有的XML中“Request”元素的属性也会被完全忽略。你可能会或可能不会这样。
如果您关心属性,或者您确实希望支持可序列化成员作为属性,则可能需要从DataContractSerializer切换到XmlSerializer。这很容易做到,只需用[XmlSerializerFormat。]
装饰你想要切换到XmlSerializer的服务或操作。