【发布时间】:2014-11-28 23:47:58
【问题描述】:
我想对继承 System.Exception 的自定义异常对象进行 JSON 序列化。 JsonConvert.SerializeObject 似乎忽略了派生类型的属性。这个问题可以很简单地说明:
class MyException : Exception {
public string MyProperty { get; set; }
}
class Program {
static void Main(string[] args) {
Console.WriteLine(JsonConvert.SerializeObject(new MyException {MyProperty = "foobar"}, Formatting.Indented));
//MyProperty is absent from the output. Why?
Console.ReadLine();
}
}
我尝试在正确的位置添加 DataContract 和 DataMember 属性。他们没有帮助。我该如何让它发挥作用?
【问题讨论】:
-
Exception是ISerializable。尝试覆盖它。 -
我找到了与 Thomas 相同的解决方案。扩展 ISerializable 实现比忽略它要好。考虑一下,ISerializable 是由基类的创建者实现的,这是有原因的。忽略它会绕过他们的所有工作。当我将 IgnoreSerializableInterface 与我的异常一起使用时,不包括 ClassName 属性。结果,我以后无法对其进行反序列化。扩展 GetObjectData 和构造函数可以完美运行。 (我会将此作为评论,但我还没有声誉。)
标签: c# json serialization json.net