c# - 反序列化对对象的 xml 响应时,xml 文档中存在错误
问题描述
我正在尝试反序列化来自 Web 服务的 xml 响应。这是回应
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ConvertToTypeResponse xmlns="http://tempuri.org/">
<ConvertToTypeResult>8959459395</ConvertToTypeResult>
</ConvertToTypeResponse>
</soap:Body>
</soap:Envelope>
我尝试将上面的 xml 反序列化到这个信封。
[XmlRoot(ElementName = "ConvertToTypeResponse")]
public class ConvertToTypeResponse
{
[XmlElement(ElementName = "ConvertToTypeResult", Namespace = "http://tempuri.org/")]
public int ConvertToTypeResult { get; set; }
[XmlAttribute(AttributeName = "xmlns")]
public string Xmlns { get; set; }
[XmlText]
public string Text { get; set; }
}
[XmlRoot(ElementName = "Body")]
public class Body
{
[XmlElement(ElementName = "ConvertToTypeResponse", Namespace = "http://tempuri.org/")]
public ConvertToTypeResponse ConvertToTypeResponse { get; set; }
}
[XmlRoot(ElementName = "Envelope")]
public class Envelope
{
[XmlElement(ElementName = "Body")]
public Body Body { get; set; }
[XmlAttribute(AttributeName = "soap")]
public string Soap { get; set; }
[XmlAttribute(AttributeName = "xsi")]
public string Xsi { get; set; }
[XmlAttribute(AttributeName = "xsd")]
public string Xsd { get; set; }
[XmlText]
public string Text { get; set; }
}
但我得到这个错误There is an error in XML document (1, 40).
IRestResponse response = _client.Execute(_request);
var c = response.Content;
if (response.IsSuccessful)
{
XmlSerializer secrializer = new XmlSerializer(typeof(Envelope));
using (StringReader reader = new StringReader(c))
{
var test = (Envelope)secrializer.Deserialize(reader);
}
}
我已经检查了结构,但我很难在模型类中找到任何不匹配的地方。xml的第一行是否可能<?xml version="1.0" encoding="UTF-8"?>
是问题,因为模型类中没有提供它。
解决方案
更改模型类以包含必要的命名空间解决了该问题
[XmlRoot(ElementName = "ConvertToTypeResponse", Namespace = "http://tempuri.org/")]
public class ConvertToTypeResponse
{
[XmlElement(ElementName = "ConvertToTypeResult", Namespace = "http://tempuri.org/")]
public string ConvertToTypeResult { get; set; }
[XmlAttribute(AttributeName = "xmlns")]
public string Xmlns { get; set; }
}
[XmlRoot(ElementName = "Body", Namespace = "http://schemas.xmlsoap.org/soap/envelope/")]
public class Body
{
[XmlElement(ElementName = "ConvertToTypeResponse", Namespace = "http://tempuri.org/")]
public ConvertToTypeResponse ConvertToTypeResponse { get; set; }
}
[XmlRoot(ElementName = "Envelope", Namespace = "http://schemas.xmlsoap.org/soap/envelope/")]
public class Envelope
{
[XmlElement(ElementName = "Body", Namespace = "http://schemas.xmlsoap.org/soap/envelope/")]
public Body Body { get; set; }
[XmlAttribute(AttributeName = "xsi", Namespace = "http://www.w3.org/2000/xmlns/")]
public string Xsi { get; set; }
[XmlAttribute(AttributeName = "xsd", Namespace = "http://www.w3.org/2000/xmlns/")]
public string Xsd { get; set; }
[XmlAttribute(AttributeName = "soap", Namespace = "http://www.w3.org/2000/xmlns/")]
public string Soap { get; set; }
}
推荐阅读
- python - 消息:没有这样的元素:无法找到元素:{"method":"css selector","selector":".pagination-shortcut-link"} 点击下一页链接
- x86 - 写入 PCI 内存映射寄存器会导致 CPU 无异常冻结吗?
- reactjs - 基于 Ionic v5 反应的启动应用程序 - 作为 chrome 扩展启动时出现空白屏幕
- plugins - Shopware 6 - 插件配置中的字段验证不起作用
- hyperledger-fabric - Hyperledger Fabric 中通过排序服务进行交易排序的标准
- jsp - 从 JSP 表达式标记访问 JSTL 变量
- python - 运行 SQL Server SP 时光标状态无效
- machine-learning - 如何基于相似性对大型数据集进行聚类?
- firebase - Firestore 中的路径
- spring-boot - spring-boot:build-image 与 jib 有什么区别?