2009-11-21 67 views
1

夥計。我使用XMLSerializer來保存和恢復程序選項。這裏是代碼:XML序列化器:爲什麼反序列化在我的情況下不起作用?

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.IO; 
using System.Xml; 
using System.Windows.Forms; 
using System.Xml.Serialization; 

namespace XMLAsk 
{ 
    class Test 
    { 
     public static string ConfigFileName = "C:\\Work\\TMP\\Config.xml"; 

     public static void Main() 
     { 

      MyOptions myOptions = new MyOptions(); 
      myOptions.Title = "Hello, world!"; 
      myOptions.Rating = 15; 

      SerializeToXML(myOptions); 

      MyOptions myOptions2 = new MyOptions(); 
      DeserializeFromXML(myOptions2); 

      MessageBox.Show(myOptions2.Title); 


     } 

     public static void SerializeToXML(MyOptions myOptions) 
     { 

      XmlSerializer serializer = new XmlSerializer(typeof(MyOptions)); 
      TextWriter textWriter = new StreamWriter(ConfigFileName); 
      serializer.Serialize(textWriter, myOptions); 
      textWriter.Close(); 

     } 

     public static void DeserializeFromXML(MyOptions myOptions2) 
     { 

      XmlSerializer deserializer = new XmlSerializer(typeof(MyOptions)); 
      TextReader textReader = new StreamReader(ConfigFileName); 
      myOptions2 = (MyOptions)deserializer.Deserialize(textReader); 
      textReader.Close(); 

     } 
    } 

    public class MyOptions 
    { 


     private string title; 
     private int rating; 

     public string Title 
     { 
      get { return title; } 
      set { title = value; } 
     } 

     public int Rating 
     { 
      get { return rating; } 
      set { rating = value;} 
     } 

    } 

} 

序列化確實有效。我得到以下xml文件(Config.xml):

<?xml version="1.0" encoding="utf-8" ?> 
- <MyOptions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <Title>Hello, world!</Title> 
    <Rating>15</Rating> 
    </MyOptions> 

但是反序列化似乎不起作用。例如,當我顯示一個選項MessageBox.Show(myOptions2.Title);(見上面的代碼),然後我得到一個空字符串。

爲什麼?我的代碼有什麼問題?

回答

4
myOptions2 = (MyOptions)deserializer.Deserialize(textReader); 

您需要返回該對象。或者使用ref參數。

+0

leppie,謝謝,它幫助! – Racoon 2009-11-21 15:07:03