2012-05-02 37 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这两个类都有一个不带任何参数的公共构造函数。