![](/img/trans.png)
[英]XML returns NULL on XmlSerializer Deserialize DotNet Core C# (Console App)
[英]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.