C# 如何使用序列化的私有字段?

C# 如何使用序列化的私有字段?,c#,C#,在这里,我定义了班级舞会上的私人场地苹果。它为MyApple提供空值。但是,如果我将Apple\u Apple设置为public field,它会将值设置为“ramro Apple”。是否有任何方法可以通过使用私有字段获得该值?我尝试t这是因为XmlSerializer只在同时具有公共get和set的成员上工作。。。如果您为MyApple提供一个公共setter,它将起作用: class Program { static void Main(string[] args) {

在这里,我定义了班级舞会上的私人场地苹果。它为MyApple提供空值。但是,如果我将Apple\u Apple设置为public field,它会将值设置为“ramro Apple”。是否有任何方法可以通过使用私有字段获得该值?我尝试t

这是因为XmlSerializer只在同时具有公共get和set的成员上工作。。。如果您为MyApple提供一个公共setter,它将起作用:

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

我认为这个问题还没有解决。
我尝试了……
这个行为是设计出来的,不是吗?您实际上是在尝试序列化只读字段。类似的问题请参见。@m.edmondson可能是意外地与一个苹果和一个球互动,提前切断了OP;-)可能重复的
public class Ball
{
    public Ball()
    {
        _apple = new Apple();
    }

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

    private Apple _apple;
}