从XMLHTTP POST请求中检索WCF中的内部XML

时间:2012-03-28 07:56:27

标签: c# xml wcf

大家好,大家好,

通过以下主题解决后,我能够将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。

提前致谢:)

1 个答案:

答案 0 :(得分:0)

您能够检索Request的原因是Request是XML元素。 XML元素直接映射到DataMembers,因此,Request会在AFISQuery数据协定类型的Request DataMember上正确反序列化。

'transid'的问题在于它是一个属性。 DataContractSerializer不支持属性,并且不能以任何方式支持它们。您需要更改您的请求XML,以便它作为元素进行转换,就像Request是一个元素一样。

另请注意,即使现​​在将Request设置为某个值,您所拥有的XML中“Request”元素的属性也会被完全忽略。你可能会或可能不会这样。

如果您关心属性,或者您确实希望支持可序列化成员作为属性,则可能需要从DataContractSerializer切换到XmlSerializer。这很容易做到,只需用[XmlSerializerFormat。]

装饰你想要切换到XmlSerializer的服务或操作。