2013-01-10 61 views
1

示例XML:小數場工作正常

<TestXML> 
    <TestDecimal attr1="Required" attr2="false">0.34</TestDecimal> 
    <TestInteger attr1="MyAttr" attr2="1" DateAdded="">25</TestInteger> 
</TestXML> 

類定義:

public class TestXML { 
    public DecimalValue TestDecimal; 
    public IntegerValue TestInteger; 
} 

public class IntegerValue { 
    [XmlText] 
    public int value {get; set;} 
    [XmlAnyAttribute] 
    public XmlAttribute[] XAttributes {get; set;} 
} 
public class DecimalValue { 
    [XmlText] 
    public decimal value {get; set;} 
    [XmlAnyAttribute] 
    public XmlAttribute[] XAttributes {get; set;} 
} 

代碼反序列化:

XmlSerializer serializer = new XmlSerializer(typeof(TestXML)); 
using (FileStream fs = new FileStream(@"C:\Test.xml", FileMode.Open)) { 
    TestXML myxml = (TestXML)serializer.Deserialize(fs); 
} 

在測試這一點,回來與整數值但不是十進制值:

myxml 
    TestDecimal 
     value | 0 
     XAttributes {string[2]} 
     [0] Name="attr1", Value="Required" 
     [1] Name="attr2", Value="false" 
    TestInteger 
     value | 25 
     XAttributes {string[3]} 
     [0] Name="attr1", Value="MyAttr" 
     [1] Name="attr2", Value="1" 
     [2] Name="DateAdded", Value="" 

是否有反序列化的小數,會導致它回來0?對於十進制的基本類型,十進制值可以很好地恢復。

+0

我從來沒有見過'DecimalValue','IntegerValue'類。嘗試更改爲十進制並查看結果 – Tilak

+0

這些類對象用於保存所需的屬性。原始類型可以工作,但不能用於屬性。 –

+0

你試過序列化,看看是否有效?換句話說,給定一個內存中的對象,你能創建一個帶有正確內容的XML文件嗎? – phoog

回答

2

在實際的代碼中,你必須做出與你在這裏展示的不同的東西。你的代碼不會像發佈一樣編譯 - 特別是類定義在C#中的名稱後面沒有()。

這對我的作品如預期(十進制值被正確地反序列化):

using System; 
using System.Diagnostics; 
using System.Net; 
using System.Net.Sockets; 
using System.Xml; 
using System.Xml.Serialization; 
using System.IO; 

namespace Test 
{ 

    public class TestXML 
    { 
     public DecimalValue TestDecimal; 
     public IntegerValue TestInteger; 
    } 

    public class IntegerValue 
    { 
     [XmlText] 
     public int value {get; set;} 
     [XmlAnyAttribute] 
     public XmlAttribute[] XAttributes {get; set;} 
    } 

    public class DecimalValue 
    { 
     [XmlText] 
     public decimal value {get; set;} 
     [XmlAnyAttribute] 
     public XmlAttribute[] XAttributes {get; set;} 
    } 

    class Program 
    { 

     static void Test() 
     { 
      XmlSerializer serializer = new XmlSerializer(typeof(TestXML)); 
      using (FileStream fs = new FileStream("Test.xml", FileMode.Open)) 
      { 
       TestXML myxml = (TestXML)serializer.Deserialize(fs); 
      } 

     } 

     static void Main(string[] args) 
     { 
      Test(); 
     } 
    } 
} 

這是複製到包含此數據的bin目錄本地的test.xml文件:

<TestXML> 
    <TestDecimal attr1="Required" attr2="false">0.34</TestDecimal> 
    <TestInteger attr1="MyAttr" attr2="1" DateAdded="">25</TestInteger> 
</TestXML> 
+0

謝謝,事實證明,我的真正問題是Visual Studio沒有正確編譯我的真實代碼。做了一個乾淨的解決方案,然後它開始正常工作。 –