【发布时间】:2018-03-21 04:58:11
【问题描述】:
我正在尝试将以下 XML 响应从 Web 服务反序列化为 C# 对象。但不知何故,元素返回 null。我在网上看了很多例子,我不确定我哪里弄错了。
<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<ns4:postTransactionResponse xmlns:ns3=\"http://www.domain/cash/api\" xmlns:ns4=\"http://www.domain/cash/api/soap\">
<ns3:return>
<field1>200</field1>
<field2>FIRSTNAME SURNAME</field2>
<field5>SUBSCRIBER</field5>
<field6>FIRSTNAME SURNAME</field6>
<field7>Active</field7>
<field8>USD</field8>
</ns3:return>
</ns4:postTransactionResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
我正在使用以下类
[XmlRoot("Envelope", Namespace = "http://schemas.xmlsoap.org/soap/envelope/")]
public class Envelope
{
[DataMember(Name = "Header", Order = 0)]
public object Header;
[DataMember(Name = "Body", Order = 1)]
public EnvelopeBody Body;
}
[XmlRoot("Body", Namespace = "http://www.domain/cash/api/soap")]
public class EnvelopeBody
{
[DataMember(Name = "postTransactionResponse", Order = 0)]
public PostTransactionResponse postTransactionResponse;
}
[XmlRoot("postTransactionResponse", Namespace = "http://www.domain/cash/api/soap")]
public class PostTransactionResponse
{
[DataMember(Name = "return", Order = 0)]
public ResponseModel return_;
}
[XmlRoot("return", Namespace = "http://www.domain/cash/api")]
public class ResponseModel
{
[XmlElement("field1")]
public string field1;
[XmlElement("field2")]
public string field2;
[XmlElement("field3")]
public string field3 ;
[XmlElement("field4")]
public string field4 ;
[XmlElement("field5")]
public string field5 ;
[XmlElement("field6")]
public string field6 ;
[XmlElement("field7")]
public string field7 ;
[XmlElement("field8")]
public string field8 ;
[XmlElement("field9")]
public string field9 ;
[XmlElement("field10")]
public string field10 ;
[XmlElement("field11")]
public string field11 ;
[XmlElement("field12")]
public string field12 ;
[XmlElement("field13")]
public string field13 ;
[XmlElement("field14")]
public string field14 ;
[XmlElement("field15")]
public string field15 ;
}
这是我用来反序列化 XML 响应的代码。我正在使用 Stream Reader 和 Envelope 类来获取字段。
//Getting response from request
using (WebResponse Serviceres = request.GetResponse())
{
using (StreamReader rd = new StreamReader(Serviceres.GetResponseStream()))
{
XmlSerializer sr = new XmlSerializer(typeof(Envelope));
var obj = (Envelope)sr.Deserialize(rd);
var dat = obj.Body;
var un = dat.postTransactionResponse;
var u = un.return_; //This is giving null
var p = u.field2; //This is giving null
}
}
ResponseModel 给出所有空值。
【问题讨论】:
标签: c# xml serialization soap