Наследование сериализации. Будет ли создано исключение, если базовый класс не помечен как [Сериализуемый]? - PullRequest
7 голосов
/ 16 июня 2011

На практическом экзамене экзамен сказал, что я ошибся.Ответ, помеченный желтым, является предполагаемым правильным ответом.

В следующей цитате часть, выделенная жирным шрифтом, я считаю неправильной: «Атрибут Serializable не наследуется производными классами, поэтому, если вы пометите толькоКласс энциклопедии с атрибутом Serializable, среда выполнения выдаст исключение при попытке сериализации поля Имя".

enter image description here

Я фактически создал пример проекта скласс Animal и класс Cat, производный от него.Я пометил Cat класс [Serializable], а класс Animal - нет.

Мне удалось успешно сериализовать и десериализовать класс Cat, включая свойства Animal.

Это проблема с версией .NET?Экзамен 70-536, поэтому он нацелен на 2.0.

1 Ответ

6 голосов
/ 16 июня 2011

Да, базовый класс также должен быть сериализуемым. Несколько простых тестовых кодов:

  public class Animal
    {
        public Animal()
        {
            name = "Test";
        }
        public string name { get; set; }
    }

    [Serializable]
    public class Cat : Animal
    {
        public string color {get; set;}
    }


        var acat = new Cat();
        acat.color = "Green";
        Stream stream = File.Open("test.bin", FileMode.Create);
        BinaryFormatter bformatter = new BinaryFormatter();

        bformatter.Serialize(stream, acat);
        stream.Close();

Когда вы пытаетесь сериализоваться, вы получаете эту ошибку:

Тип 'SerializeTest.Animal' в сборке 'SerializeTest, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = null' не помечена как сериализуемая.

edit - я заметил, что вы сделали то же самое, но у вас это сработало. У вас есть код, который вы использовали? Это в .net 4, но я не думаю, что он сильно изменился между версиями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...