2013-03-09 23 views
3

我想了解如何使用XMLSerializer。我使用以下示例代码创建了一个VS2010项目:http://msdn.microsoft.com/en-us/library/tz8csy73(v=vs.100).aspx来自MSDN的XmlSerializer示例失败

该代码应该将一个简单的XML文档反序列化为一个简单的C#对象。它编译并运行时没有错误,但无法恢复C#对象。所有字段保持为0或空值。

我有样本要求的.NET Framework 4.0。我在最后一个Console.Write上放置了一个断点,并且可以看到所有的值都是0或null。

回答

4

问题是样本中的XML文件。元素的名称以XML名称空间为前缀,这会导致序列化程序不会将它们映射到OrderedItem类型的原始字段。如果您删除XML文件中的名称空间,则此示例将正确运行。

另外,您可以装点OrderedItem类型包含在simple.xml文件中使用

public class OrderedItem 
{ 
    [XmlElement(Namespace = "http://www.cpandl.com")] 
    public string ItemName; 
    [XmlElement(Namespace = "http://www.cpandl.com")] 
    public string Description; 
    [XmlElement(Namespace = "http://www.cohowinery.com")] 
    public decimal UnitPrice; 
    [XmlElement(Namespace = "http://www.cpandl.com")] 
    public int Quantity; 
    [XmlElement(Namespace = "http://www.cohowinery.com")] 
    public decimal LineTotal; 

    // A custom method used to calculate price per item. 
    public void Calculate() 
    { 
     LineTotal = UnitPrice * Quantity; 
    } 
} 
+0

哦XML命名空间的正确的命名空间,所以有用的,但有时... ...那么令人讨厌。 – 2013-03-09 00:46:58

+0

@ ta.speot.is非常讨厌。 :-P – 2013-03-09 00:55:25

+0

谢谢,JaredPar。你建议的两种方法都像你说的那样工作。我不应该假定MSDN示例代码应该按原样工作。我认为这更可能是我的设置。 – 2013-03-09 02:23:19