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]
,则可以轻松避免所有这些问题。