簡體   English   中英

從XML獲取C#對象的通用列表工作正常,除非我將其放在對象列表中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM