gpt4 book ai didi

c# - 将 XML 反序列化为对象 - XML 文档 (0, 0) 中存在错误

转载 作者:数据小太阳 更新时间:2023-10-29 01:47:32 24 4
gpt4 key购买 nike

我试图从一个简单的 XML 文档中读取元素值并将它们绑定(bind)到一个对象,但是我的 XML 文档遇到了问题。我已经对其进行了验证,可以确认文档本身没有问题,但可以扩展该行的结果:

var nodes = from xDoc in xml.Descendants("RewriteRule")
select xmlSerializer.Deserialize(xml.CreateReader()) as Url;

显示 “XML 文档 (0, 0) 中存在错误”

内部异常读取 <RewriteRules xmlns=''> was not expected.

我不确定我做错了什么?

我的 XML 如下:

<?xml version="1.0" encoding="utf-8" ?>
<RewriteRules>
<RewriteRule>
<From>fromurl</From>
<To>tourl</To>
<Type>301</Type>
</RewriteRule>
</RewriteRules>

加载 XML 文件并尝试反序列化它的代码:-

public static UrlCollection GetRewriteXML(string fileName)
{
XDocument xml = XDocument.Load(HttpContext.Current.Server.MapPath(fileName));
var xmlSerializer = new XmlSerializer(typeof(Url));

var nodes = from xDoc in xml.Descendants("RewriteRule")
select xmlSerializer.Deserialize(xml.CreateReader()) as Url;

return nodes as UrlCollection;
}

我的 Url 对象类:-

[Serializable]
[XmlRoot("RewriteRule")]
public class Url
{
[XmlElement("From")]
public string From { get; set; }
[XmlElement("To")]
public string To { get; set; }
[XmlElement("Type")]
public string StatusCode { get; set; }

public Url()
{
}

public Url(Url url)
{
url.From = this.From;
url.To = this.To;
url.StatusCode = this.StatusCode;
}
}

谁能看出我在这里做错了什么?

谢谢

最佳答案

我不太熟悉from select 语句,但似乎您只是传入了xml,它是整个XDocument,而不是您的 RewriteRuleXElement。这就是为什么您会收到错误消息,指出 RewriteRules 未知 - XmlSerializer 需要一个 RewriteRule

我设法改用 LINQ 重写了您的代码(但如果您知道如何从 from select 语句中获取单个元素,那应该同样有效)。

这应该会给您正确的结果 - rr 是从 Descendants 返回的 XElement:

public static IEnumerable<Url> GetRewriteXML()
{
XDocument xml = XDocument.Load(HttpContext.Current.Server.MapPath(fileName));

var xmlSerializer = new XmlSerializer(typeof(Url));

var nodes = xml.Descendants("RewriteRule")
.Select(rr => xmlSerializer.Deserialize(rr.CreateReader()) as Url);

return nodes;
}

关于c# - 将 XML 反序列化为对象 - XML 文档 (0, 0) 中存在错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15405832/

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