2012-05-02 65 views
2
class Program 
{ 
    static void Main(string[] args) 
    { 
     var ball = new Ball(); 
     ball.MyApple.Name = "ramro apple"; 

     XmlSerializer ser = new XmlSerializer(typeof(Ball)); 
     var sb = new StringBuilder(); 
     var writer = new StringWriter(sb); 

     ser.Serialize(writer, ball); 

     XmlDocument doc = new XmlDocument(); 
     doc.LoadXml(sb.ToString()); 

     XmlNodeReader reader = new XmlNodeReader(doc.DocumentElement); 
     object meroBall = ser.Deserialize(reader); 
     Ball myBall = (Ball)meroBall; 
    } 
} 

public class Apple 
{ 
    public string Name 
    { 
     get; 
     set; 
    } 
} 

public class Ball 
{ 
    public Ball() 
    { 
     _apple = new Apple(); 
    } 

    public Apple MyApple 
    { 
     get { return _apple; } 
    } 

    private Apple _apple; 
} 

在這裏,我已經定義了類Ball中的私人領域Apple _apple。它給我MyApple的空值。但是,如果我將Apple _apple設置爲公共字段,它將會給出「ramro apple」的值。有沒有辦法通過使用私人領域獲得價值?我嘗試牛逼我們如何使用序列化的私人領域?

+1

我不認爲這個問題已經完成'我試試....' –

+1

這種行爲是設計是不是?您正在嘗試序列化只讀字段。有關類似問題,請參閱http://stackoverflow.com/questions/5585364/force-xml-serialization-to-serialize-readonly-property。 – dash

+0

@ m.edmondson也許與蘋果和Ball的偶然交互可能會導致OP早關;-) – dash

回答

1

這是因爲XmlSerializer的僅適用於成員既有公共get和set ...如果你MyApple提供一個公共的setter它會工作:

public class Ball 
{ 
    public Ball() 
    { 
     _apple = new Apple(); 
    } 

    public Apple MyApple 
    { 
     get { return _apple; } 
     set { _apple = value; } 
    } 

    private Apple _apple; 
} 

當然這還假定Ball和Apple這兩個類都有一個不帶任何參數的公共構造函數。