c# - 使用 yield 返回 IEnumerable 时将 XML 反序列化为 C# 对象
问题描述
当我尝试对 XML 文件进行反序列化时出现此错误 XML 文档 (1、2) 中存在错误。
我在 webn 上搜索了几种解决方案,但都不起作用。
//The XML
<?xml version="1.0" encoding="utf-8"?>
<books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<book>
<bookid>9d6378e5-e01d-454d-bae5-52d9a6331f2e</bookid>
<updatedate>2008-04-25</updatedate>
</book>
</books>
public class MyBook
{
public string BookId { get; set; }
public DateTime UpdateDate { get; set; }
}
//I read the file, working
public IEnumerable<XElement> XElements()
{
using (XmlReader reader = XmlReader.Create(this._filePath))
{
reader.MoveToContent();
while (reader.Read())
{
if (reader.Name == "book")
{
XElement element = XElement.ReadFrom(reader) as XElement;
if (element != null)
yield return element;
}
}
}
}
//When I try to Deserialize that's crash
[TestMethod]
public void ReadXmlTest()
{
ReadXmlFile readXmlFile = new ReadXmlFile(thepath);
IEnumerable<XElement> xElements = readXmlFile.XElements();
foreach (XElement e in xElements)
{
XmlSerializer serializer = new XmlSerializer(typeof(MyBook));
using (StringReader myStream = new StringReader(e.ToString()))
{
MyBook res = (MyBook)serializer.Deserialize(myStream);
}
//I gtried this solution too
//XmlSerializer xmlSerializer = new XmlSerializer(typeof(MyBook));
//MyBook myBook = (MyBook)xmlSerializer.Deserialize(e.CreateReader());
}
}
解决方案
你的类模型应该是这样的
[XmlRoot("book")]
public class MyBook
{
[XmlElement("bookid")]
public string BookId { get; set; }
[XmlElement("updatedate")]
public DateTime UpdateDate { get; set; }
}
因为 xml 元素的名称与类和属性的名称不匹配。
推荐阅读
- testing - 使用 TestCafe 运行器时 dockerfile 中的文件或全局参数
- c# - EF:选择所有不在另一个表中的
- python-3.x - python在vsphere上列出所有带有ip的vm
- task - Conemu:如何在当前打开的选项卡中打开目录?
- wpf - WPF XAML:如何使用自定义 RoutedEvent 修复“值不能为空”
- python - 使用 Python 请求检查 Xbox Live 帐户是否存在
- javascript - 如何通过电子表格使用应用程序脚本在新选项卡中打开特定的谷歌文件夹
- database - 我需要从数据库中提取值并将参数显示为 Jenkins 参数化作业中的下拉列表。建议一种方法来实现这一点
- javascript - React 给了我错误期望一个赋值或函数调用,而是看到一个表达式
- android - 在 Andorid Studio 中更改 Activity 时视频暂停