我在XML文件中有一些数据正在通过流读取。我有权访问流对象,我必须使用它反序列化数据并填充List。我的模型类在下面给出
[XmlRoot("invoices")]
public class Invoice
{
[XmlElement(ElementName = "description", IsNullable= true)]
public string Description { get; set; }
[XmlElement(ElementName = "invoice_date")]
public string InvoiceDate { get; set; }
[XmlElement(ElementName = "invoice_number")]
public string InvoiceNumber { get; set; }
[XmlElement(ElementName = "date_due")]
public string DateDue { get; set; }
[XmlElement(ElementName = "amount")]
public string Amount { get; set; }
}
以下是我用来读取数据的方法的片段
public List<Invoice> ParseRecords(Stream stream)
{
List<Invoice> invoices = new List<Invoice>();
try
{
stream.Position = 0;
XmlSerializer serializer = new XmlSerializer(typeof(List<Invoice>));
invoices = (List<Invoice>)serializer.Deserialize(stream);
}
catch (Exception ex)
{
log.Error(ex);
}
return invoices;
}
XML数据包含带有名为“发票”的根标签的发票和带有“发票”标签的多个子记录。没有为根元素定义名称空间,因为从外部源接收XML数据,所以无法完成。 XML数据格式正确。我面临的问题是,当执行Deserialize()方法时,它会抛出一个异常说 XML文档中存在错误(2,2)。 内部异常说{“不是预期的。”}
有人可以帮我弄清楚这里有什么问题吗?
答案 0 :(得分:3)
实现预期结果的一种方法如下
[XmlRoot(ElementName = "invoices")]
public class Invoices
{
[XmlElement(ElementName = "invoice")]
public List<Invoice> Invoice { get; set; }
}
[XmlRoot("invoice")]
public class Invoice
{
[XmlElement(ElementName = "description", IsNullable = true)]
public string Description { get; set; }
[XmlElement(ElementName = "invoice_date")]
public string InvoiceDate { get; set; }
[XmlElement(ElementName = "invoice_number")]
public string InvoiceNumber { get; set; }
[XmlElement(ElementName = "date_due")]
public string DateDue { get; set; }
[XmlElement(ElementName = "amount")]
public string Amount { get; set; }
}
你的解析记录功能应该像下面的
public Invoices ParseRecords(Stream stream)
{
Invoices invoices;
try
{
stream.Position = 0;
XmlSerializer serializer = new XmlSerializer(typeof(Invoices);
invoices = (Invoices)serializer.Deserialize(stream);
}
catch (Exception ex)
{
log.Error(ex);
}
return invoices;
}
答案 1 :(得分:0)
数据中有一些不可见的代码(看起来像空格),它可能是由编码引起的。