将 XML 数据转换为 C# 类
Posted
技术标签:
【中文标题】将 XML 数据转换为 C# 类【英文标题】:Convert XML data to C# class 【发布时间】:2019-01-25 16:15:17 【问题描述】:我的项目是 Asp.net Core
我想,XML 数据有一个节点 PersonelInfo
我尝试读取 XML,但它的代码不起作用。
我该如何解决这个代码?我的问题是什么?
var xmlGetDetailsUser = new XmlDocument();
xmlGetDetailsUser.LoadXml(await responseMessageGetDetailsUser.Content.ReadAsStringAsync());
using (StringReader reader = new StringReader(xmlGetDetailsUser.InnerXml))
try
PersonelInfo data = (PersonelInfo)(serializer.Deserialize(reader));
catch (System.Exception e)
类
public class PersonelInfo
public string PersonelCode get; set;
public string Email get; set;
xmlGetDetailsUser.InnerXml
有这个值:
<?xml version=\"1.0\" encoding=\"utf-8\"?>
<ArrayOfPersonelInfo xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns=\"sample url .....\">
<PersonelInfo>
<PersonelCode>99999</PersonelCode>
<Email>test@test.com</Email>
</PersonelInfo>
</ArrayOfPersonelInfo>
当运行我的程序时,在 try catch 中显示此异常
XML 中有错误
【问题讨论】:
Convert XML String to Object的可能重复 转义的"
字符是否是原因?
inner XML 实际上包含<? xml ... ?>
声明会很奇怪。你能发布完整的 XML 吗?
@DaisyShipton 是完整的 XML
@SebastianHofmann 转义的“字符是什么意思?
【参考方案1】:
您应该为XmlSerializer
设置命名空间并将其类型更改为List<PersonelInfo>
。
试试这个:
XmlSerializer serializer = new XmlSerializer(typeof(List<PersonelInfo>), "sample url ....");
XmlReaderSettings settings = new XmlReaderSettings();
using (StringReader textReader = new StringReader(await responseMessageGetDetailsUser.Content.ReadAsStringAsync()))
using (XmlReader xmlReader = XmlReader.Create(textReader, settings))
var data = (List<PersonelInfo>)serializer.Deserialize(xmlReader);
【讨论】:
【参考方案2】:我找到了答案,但是 这似乎不是将 XML 转换为 C# 的好方法 你觉得如何改进这段代码?
var xmlGetDetailsUser = new XmlDocument();
xmlGetDetailsUser.LoadXml(await responseMessageGetDetailsUser.Content.ReadAsStringAsync());
var result = xmlGetDetailsUser.GetElementsByTagName("PersonelInfo");
XmlSerializer serializer = new XmlSerializer(typeof(PersonelInfo));
var personelInfo = new PersonelInfo();
personelInfo.PersonelCode = result.Item(0)["PersonelCode"].InnerText;
personelInfo.Email = result.Item(0)["Email"].InnerText;
【讨论】:
你能告诉我们web service
的方法定义吗?它会返回一个数组还是一个对象?对于 xml,它似乎是数组而不是对象。试试responseMessageGetDetailsUser.Content.ReadAsAsync<PersonelInfo>()
和 responseMessageGetDetailsUser.Content.ReadAsAsync<IList<PersonelInfo>>()
@TaoZhou My Webservice 返回类数组以上是关于将 XML 数据转换为 C# 类的主要内容,如果未能解决你的问题,请参考以下文章