C# 序列化继承:如果基类为';t标记的[可序列化]?

C# 序列化继承:如果基类为';t标记的[可序列化]?,c#,.net,inheritance,serializable,C#,.net,Inheritance,Serializable,参加一次练习考试考试时,考试说我弄错了。用黄色标记的答案是假定的正确答案 在下面的引文中,我认为粗体标记的部分是错误的:“Serializable属性不是由派生类继承的,因此如果您仅使用Serializable属性标记Encyclopedia类,运行时将在尝试序列化Name字段时引发异常 实际上,我创建了一个带有Animal类和从中派生的Cat类的示例项目。我标记了Cat类[Serializable],而动物类没有标记 我能够成功地序列化和反序列化Cat类,包括Animal属性 这是一个.NE

参加一次练习考试考试时,考试说我弄错了。用黄色标记的答案是假定的正确答案

在下面的引文中,我认为粗体标记的部分是错误的:“Serializable属性不是由派生类继承的,因此如果您仅使用Serializable属性标记Encyclopedia类,运行时将在尝试序列化Name字段时引发异常

实际上,我创建了一个带有
Animal
类和从中派生的
Cat
类的示例项目。我标记了
Cat
[Serializable]
,而
动物
类没有标记

我能够成功地序列化和反序列化
Cat
类,包括
Animal
属性


这是一个.NET版本问题吗?考试是70-536,所以它的目标是2.0。

是的,基类还需要可序列化。一些简单的测试代码:

  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,版本=1.0.0.0,区域性=中性,PublicKeyToken=null”中的类型“SerializeTest.Animal”未标记为可序列化


编辑-我注意到你做了同样的事情,但它为你工作。你有你使用的密码吗?这一个在.NET4中,但我认为它在不同版本之间没有太大变化。

Hmmm…好的,所以我的测试成功的原因可能是我实现了自定义序列化。现在我想起来了,我想这就是原因。但是,如果您使用默认的序列化方式,它将得到一个异常。谢谢哦,是的。自定义序列化(甚至一些其他内置序列化程序)忽略[Serializable]属性。在这方面,他们可能会把问题弄得更清楚一些这就是这些试题的问题所在。他们大多是各种各样的把戏问题,而不是你知道多少。