序列化继承:如果基类未标记为[Serializable],是否会抛出异常?

时间:2011-06-16 01:14:29

标签: c# .net inheritance serializable

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

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

enter image description here

我实际创建了一个示例项目,其中包含Animal类和从中派生的Cat类。我标记了Cat[Serializable]Animal类不是。

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

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

1 个答案:

答案 0 :(得分:6)

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

  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中输入'SerializeTest.Animal',Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'未标记为可序列化。

编辑 - 我注意到你做了同样的事情,但它对你有用。你有使用的代码吗?这个是在.net 4中,但我不认为它在版本之间有太大的变化。