[英]Getting Generic List of C# objects from XML working fine, except when I put that in a List of Objects
這是可行的:(每個發票都有很多LineItem)
public class Invoice
{
public int InvoiceId { get; set; }
public List<LineItem> LineItems { get; set; }
}
public class LineItem
{
public int LineItemId { get; set; }
}
string strInvoice = "<Invoice> <InvoiceId>12345</InvoiceId> <LineItems> <LineItem> <LineItemId>123</LineItemId> </LineItem> <LineItem> <LineItemId>456</LineItemId> </LineItem> </LineItems></Invoice>";
object result = new System.Xml.Serialization.XmlSerializer(typeof(Invoice)).Deserialize(new System.IO.StringReader(strInvoice));
對象完美反序列化。
但是現在,我嘗試制作一個發票清單(我現在將當前XML字符串括在<Invoices></Invoices>
):
public class InvoiceList
{
public List<Invoice> Invoices { get; set; }
}
string strInvoices = "<Invoices><Invoice> <InvoiceId>12345</InvoiceId> <LineItems> <LineItem> <LineItemId>123</LineItemId> </LineItem> <LineItem> <LineItemId>456</LineItemId> </LineItem> </LineItems></Invoice></Invoices>";
object results = new System.Xml.Serialization.XmlSerializer(typeof(Invoice)).Deserialize(new System.IO.StringReader(strInvoices));
導致:
There is an error in XML document (1, 2).
{"<Invoices xmlns=''> was not expected."}
如何構造我的類或SQL以反序列化發票清單?
嘗試此操作-從被標記為重復的Twitter問題的答案中獲取的,我沒有任何結果:
string strInvoices = "<Invoices><Invoice> <InvoiceId>12345</InvoiceId> <LineItems> <LineItem> <LineItemId>123</LineItemId> </LineItem> <LineItem> <LineItemId>456</LineItemId> </LineItem> </LineItems></Invoice></Invoices>";
XmlRootAttribute xRoot = new XmlRootAttribute();
xRoot.ElementName = "Invoices";
xRoot.IsNullable = true;
object results = new System.Xml.Serialization.XmlSerializer(typeof(Invoice),xRoot).Deserialize(new System.IO.StringReader(strInvoices));
如果我這樣做,我會得到相同的錯誤:
object results = new System.Xml.Serialization.XmlSerializer(typeof(Invoice),xRoot).Deserialize(new System.IO.StringReader(strInvoices));
如果按照注釋建議執行此操作,則不會返回任何內容:
object results = new System.Xml.Serialization.XmlSerializer(typeof(InvoiceList),xRoot).Deserialize(new System.IO.StringReader(strInvoices));
因此,它與標記為重復的示例不同,我已經花了很多力氣來復制此錯誤,並使其盡可能通用且易於讀取和復制並粘貼到Visual Studio中。
您將反序列化為錯誤的類型-您想反序列InvoiceList
。
您還應該在InvoiceList
類中添加一些屬性,以正確映射元素名稱:
[XmlRoot("Invoices")]
public class InvoiceList
{
[XmlElement("Invoice")]
public List<Invoice> Invoices { get; set; }
}
然后您應該可以像這樣反序列化:
var serializer = new XmlSerializer(typeof(InvoiceList));
using (var reader = new StringReader(strInvoices))
{
var list = (InvoiceList)serializer.Deserialize(reader);
}
有關工作示例,請參閱https://dotnetfiddle.net/mBtPSP 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.