我一直在尝试从XML读取数据。当我尝试反序列化它时,我收到以下错误:
“XML文档(1,1)中存在错误。”
供您参考,我附上我的整个代码以及我的xml文件。
C#代码:
CarCollection cars = null;
string path = @"C:\Users\harsha\Desktop\Doc.xml";
XmlSerializer serializer = new XmlSerializer(typeof(CarCollection));
var reader = XmlReader.Create(path);
cars = (CarCollection)serializer.Deserialize(reader);
reader.Close();
此外,数据结构如下:
namespace XMLDataReader
{
[Serializable()]
public class Car
{
[System.Xml.Serialization.XmlElement("StockNumber")]
public string StockNumber { get; set; }
[System.Xml.Serialization.XmlElement("Make")]
public string Make { get; set; }
[System.Xml.Serialization.XmlElement("Model")]
public string Model { get; set; }
}
[Serializable()]
[System.Xml.Serialization.XmlRoot("CarCollection")]
public class CarCollection
{
[XmlArray("Cars")]
[XmlArrayItem("Car", typeof(Car))]
public Car[] Car { get; set; }
}
XML文件:
<CarCollection>
<Cars>
<Car>
<StockNumber>1020</StockNumber>
<Make>Nissan</Make>
<Model>Sentra</Model>
</Car>
<Car>
<StockNumber>1010</StockNumber>
<Make>Toyota</Make>
<Model>Corolla</Model>
</Car>
<Car>
<StockNumber>1111</StockNumber>
<Make>Honda</Make>
<Model>Accord</Model>
</Car>
</Cars>
</CarCollection>
等待一些帮助。提前谢谢!
答案 0 :(得分:1)
你能用记事本打开它并确认内容符合你的期望吗?如果出现以下情况,您将看到错误:
也可能是因为您没有定义Xml声明标头(取决于您正在使用的xml规范的版本):
例如:
<?xml version="1.0" encoding="UTF-8" ?>
答案 1 :(得分:1)
答案 2 :(得分:1)
就我而言,串行器中存在一个错误。我不确定是库还是逻辑。
要检查您是否有和我一样的案例:
为解决此问题,在反序列化xml字符串之前,我只需检查第一个字符是否为天使括号。如果不是,则删除该字符:
private static string Validate(string xml)
{
if (string.IsNullOrEmpty(xml))
return xml;
try
{
var index = xml.IndexOf('<');
if (index > 0)
xml = xml.Substring(index);
}
catch { }
return xml;
}