2013-03-09 85 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