如何在 C# 中反序列化具有前缀的 XML

Posted

技术标签:

【中文标题】如何在 C# 中反序列化具有前缀的 XML【英文标题】:How to deserialize XML having prefix in C# 【发布时间】:2021-02-23 11:10:18 【问题描述】:

这是我的 XML

<?xml version="1.0" encoding="UTF-8"?>
 <ls:LeadResponse xmlns:ls="example.org/ls">
    <ls:status>OK</ls:status>
    <ls:code>approved</ls:code>
    <ls:message>posted</ls:message>
 </ls:LeadResponse>

它到处都有前缀ls

为了反序列化我已经这样做了

已创建模型:

 [XmlRoot(ElementName = "LeadResponse",Namespace="example.org/ls")]
 public class LeadProviderResponse
 
     [XmlElement(Namespace = "example.org/ls")]
     public string Status  get; set; 

     [XmlElement(Namespace = "example.org/ls")]
     public string Code  get; set; 

     [XmlElement(Namespace = "example.org/ls")]
     public string Message  get; set; 
 

以及反序列化的代码

using var streamReader = new StringReader(xmlContent); 
using var xmlReader = XmlReader.Create(streamReader, null);    
var serializer = new System.Xml.Serialization.XmlSerializer(typeof(LeadProviderResponse));
var result = (LeadProviderRespone)serializer.Deserialize(xmlReader);

它无法正确反序列化。谁能告诉我哪里做错了?

【问题讨论】:

【参考方案1】:

外壳:

[XmlElement(Namespace = "example.org/ls", ElementName = "status")]
public string Status  get; set; 

[XmlElement(Namespace = "example.org/ls", ElementName = "code")]
public string Code  get; set; 

[XmlElement(Namespace = "example.org/ls", ElementName = "message")]
public string Message  get; set; 

或(相同的结果):

[XmlElement("status", Namespace = "example.org/ls")]
public string Status  get; set; 

[XmlElement("code", Namespace = "example.org/ls")]
public string Code  get; set; 

[XmlElement("message", Namespace = "example.org/ls")]
public string Message  get; set; 

【讨论】:

哎呀..不错。谢谢。

以上是关于如何在 C# 中反序列化具有前缀的 XML的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中反序列化 XML 元素的存在以布尔

在 C# 中反序列化 XML [重复]

C# Restful WCF 服务。无法在帖子正文中反序列化 XML

如何在 C# 中反序列化多个 JSON 对象?

如何反序列化 C# 中只有属性的 xml 元素?

无论如何在 C# 中反序列化之前检查对象的类类型?