Сериализация XML частных переменных - PullRequest
1 голос
/ 02 сентября 2011

Я новичок в сериализации XML, и я прочитал, что переменные private не могут быть сериализованы, пока они не будут переданы в открытом доступе.Но во время отладки после десериализации я могу найти частные переменные также в десериализованном объекте.Может кто-нибудь объяснить это?Вот мой код:

class Program
{
    static void Main(string[] args)
    {
        XmlSerializer xs = new XmlSerializer(typeof(Nokia));
        Nokia n = new Nokia();

        using (Stream s = new FileStream("XMLFile", FileMode.Create, FileAccess.Write, FileShare.None))
        {
            xs.Serialize(s, n);
        }

        XmlSerializer xs1 = new XmlSerializer(typeof(Nokia));
        using (Stream ds = File.OpenRead("XMLFile"))
        {
            Nokia dn = (Nokia)xs1.Deserialize(ds);
        }
    }
}

public class Mobile
{
    public int Height = 10;
    private int weight = 20;
    public Mobile() {}
}

public class Nokia : Mobile
{
    public string Signal = "Poor";
    public Nokia() {}
}

Во время отладки, когда я быстро наблюдаю за моим объектом после десериализации, я могу найти переменную weight в базе.Как это возможно?Или я где-то не прав?

1 Ответ

5 голосов
/ 02 сентября 2011

Закрытые переменные все еще будут существовать в десериализованном объекте, но их значения не будут сохранены в сериализованной версии XML.

Чтобы продемонстрировать это, если вы создаете экземпляр своего объекта, измените значение weight, а затем сериализуйте его в XML. Если вы десериализуете его, значение weight в десериализованном объекте будет значением по умолчанию, а не значением, установленным для исходного объекта.

...