gpt4 book ai didi

c# - 如何反序列化 SOAP 响应?

转载 作者:行者123 更新时间:2023-12-04 14:58:34 24 4
gpt4 key购买 nike

我正在尝试将以下 xml 反序列化为 c# 对象:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:topupResponse xmlns:ns2="http://www.claro.com.hn/esb/ws/topups/"
xmlns:ns3="http://www.claro.com.hn/esb/ws/ops/">
<result>
<conversionRate>7.7765</conversionRate>
<datetime>2018-01-10T08:33:19.685-06:00</datetime>
<distAmount>5.00</distAmount>
<msisdn>50279613880</msisdn>
<newBalance>38</newBalance>
<operAmount>38.882500</operAmount>
<responseCode>0</responseCode>
<transId>228855</transId>
</result>
</ns2:topupResponse>


我已经像这样设置了我的类(class):
[XmlRoot("Envelope", Namespace = "http://schemas.xmlsoap.org/soap/envelope/")]
public class Response
{
public ResponseBody Body { get; set; }
}

public class ResponseBody
{
[XmlElement(ElementName = "topupResponse", Namespace = "http://www.claro.com.hn/esb/ws/topups/, http://www.claro.com.hn/esb/ws/ops/")]
public TopupResponse topupResponse { get; set; }
}

public class TopupResponse
{
public Result result { get; set; }
}

public class Result
{
public string conversionRate { get; set; }
public string datetime { get; set; }
public string distAmount { get; set; }
public string msisdn { get; set; }
public string newBalance { get; set; }
public string operAmount { get; set; }
public string responseCode { get; set; }
public string transId { get; set; }
}

我正在使用以下方法进行反序列化:
  private static object XmlDeserializeFromString(string objectData, Type type)
{
objectData = RemoveInvalidXmlCharacters(objectData);//customizeoption if you know the xml you receive wont have any invalid characters you can remove this function

var serializer = new XmlSerializer(type);
object result;
using (var reader = new StringReader(objectData))
{
result = serializer.Deserialize(reader);
}
return result;
}

但是我没有在我的对象中获得结果值。它只反序列化到 TopupResonse 并且为空。我试过谷歌了一下,但找不到任何具体的东西。我认为,问题出在命名空间上,并不确定。任何帮助将非常感激。

最佳答案

我不得不更新两个类如下:

 public class TopupResponse
{
[XmlElement(Namespace = "")]
public Result result { get; set; }
}

public class Result
{
[XmlElement(Namespace = "")]
public string conversionRate { get; set; }

[XmlElement(Namespace = "")]
public string datetime { get; set; }

[XmlElement(Namespace = "")]
public string distAmount { get; set; }

[XmlElement(Namespace = "")]
public string msisdn { get; set; }

[XmlElement(Namespace = "")]
public string newBalance { get; set; }

[XmlElement(Namespace = "")]
public string operAmount { get; set; }

[XmlElement(Namespace = "")]
public string responseCode { get; set; }

[XmlElement(Namespace = "")]
public string transId { get; set; }
}

向结果类添加空命名空间解决了这个问题。分享,以防万一有人觉得有帮助。

关于c# - 如何反序列化 SOAP 响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48661345/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com