簡體   English   中英

AspNet Core-反序列化XML返回null

[英]AspNet Core - Deserialize XML returns null

我正在嘗試反序列化一個簡單的XML,但是它總是向我的對象返回null。

XML格式

<ns0:Customer xmlns:ns0="http://myNameSpace.Customer">
  <Company>001</Company>
  <Division>003</Division>
</ns0:Customer>

[XmlRoot(ElementName = "Customer", Namespace = "http://myNameSpace.Customer")]
public class Customer
{
    [XmlElement(ElementName = "Company")]
    public string Company { get; set; }
    [XmlElement(ElementName = "Division")]
    public string Division { get; set; }
}

File.AppendAllText(fileName, string.Format("Polling at {0}\n", DateTime.Now.ToString("o")));
                XmlSerializer serializer = new XmlSerializer(typeof(Customer));
                using (FileStream fileStream = new FileStream(PlatformServices.Default.Application.ApplicationBasePath
                    + @"\Customers\Customer.xml", FileMode.Open))
                {
                    var customers = ((Customer)serializer.Deserialize(fileStream));
                }

結果

在此處輸入圖片說明

有任何想法嗎 ?

您的contains元素未定義默認名稱空間,因此文檔的默認名稱空間為空字符串。

這意味着<Company><Division>與包含元素的名稱空間不同,並繼承默認名稱空間""

如果重寫屬性以考慮到這一點,那么您的示例將起作用:

[XmlRoot(ElementName = "Customer", Namespace = "http://myNameSpace.Customer")]
public class Customer
{
    [XmlElement(ElementName = "Company", Namespace = "")]
    public string Company { get; set; }
    [XmlElement(ElementName = "Division", Namespace = "")]
    public string Division { get; set; }
}

如下所示:

var xmlStr = @" <ns0:Customer xmlns:ns0=""http://myNameSpace.Customer"">
                 <Company>001</Company>
                 <Division>003</Division>
                </ns0:Customer>";
var ms = new MemoryStream(Encoding.UTF8.GetBytes(xmlStr));
XmlSerializer serializer = new XmlSerializer(typeof(Customer));
var customer = ((Customer)serializer.Deserialize(ms));
//yay. fully populated

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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