为什么默认情况下不应用SerializationAttribute?

时间:2015-10-15 15:44:03

标签: c# .net serialization

Seriosly,为什么?我们为什么要总是隐含地写[Serializable]?这让我写出这样丑陋的代码:

[Serializable]
public class SerializableFont
{
    public string Name { get; set; }
    public int Size { get; set; }

    public SerializableFont() { }

    public SerializableFont(string name, int size)
    {
        Name = name;
        Size = size;
    }

    public static implicit operator Font(SerializableFont font)
    {
        return new Font(font.Name, font.Size);
    }
}

或者

[Serializable]
public class SerializableColor
{
    public string ColorHtml { get; set; }

    public SerializableColor() { }

    public static implicit operator Color(SerializableColor color)
    {
        return ColorTranslator.FromHtml(color.ColorHtml);
    }

    public static implicit operator SerializableColor(Color color)
    {
        return new SerializableColor { ColorHtml = ColorTranslator.ToHtml(color) };
    }
}

甚至当我想在域中运行一些带闭包的代码时:

var domain = AppDomain.CreateDomain("DomainName");
string message = "Hello world!";
domain.DoCallBack(() => Console.WriteLine(message));

我得到了一个例外

  

未处理的例外情况:   System.Runtime.Serialization.SerializationException:键入' MainProject.Program +<> c__DisplayClass1'在汇编' LoadUnloadTest中,   Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'没有标记   可序列化。

如果所有这些类型默认为[Serializable],则可以轻松避免所有这些问题。

0 个答案:

没有答案