我正在尝试学习如何使用XMLSerializer。我使用示例代码创建了一个VS2010项目:http://msdn.microsoft.com/en-us/library/tz8csy73(v=vs.100).aspx。
代码应该将简单的XML文档反序列化为简单的C#对象。它编译并运行时没有错误,但无法恢复C#对象。所有字段都保持为0或null。
我有示例要求的.NET Framework 4.0。我在最后一个Console.Write上放了一个断点,可以看到所有值都是0或null。
答案 0 :(得分: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;
}
}