AspNet Core - 反序列化XML返回null

时间:2017-06-21 01:28:51

标签: c# xml asp.net-core

我正在尝试反序列化一个简单的XML,但它总是将null返回给我的对象。

XML

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

CLASS

[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; }
}

CODE

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));
                }

RESULT

https://www.googleapis.com/auth/user.birthday.read

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您的包含元素未定义默认命名空间,因此文档的默认命名空间为空字符串。

这意味着<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