c# - JSON.NET 忽略从 System.Exception 派生的类型中的属性。为什么?

标签 c# json serialization json.net

我想对继承 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,Json.Net 默认使用它来序列化对象。您可以告诉它忽略 ISerializable,如下所示:

var settings = new JsonSerializerSettings() {
    Formatting = Formatting.Indented,
    ContractResolver = new DefaultContractResolver() { 
        IgnoreSerializableInterface = true 
    } 
};
Console.WriteLine(JsonConvert.SerializeObject(new MyException {MyProperty = "foobar"}, settings));

关于c# - JSON.NET 忽略从 System.Exception 派生的类型中的属性。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27197317/

相关文章:

c# - 如果列表为空,则添加默认字符串

javascript - Chrome 扩展程序包含错误

javascript - 使用 .get 和 youtube api 检查视频是否存在

c# - 无法在 selenium webdriver 中找到::之前的 css 选择器元素

c# - 使用 C# 在复杂网络上添加 NAT UPnP 映射

javascript - 使用 for 循环和列表将 props 传递给 RN 组件

django - 列表序列化器多个对象创建

c++ - 如何获得表格的大小

apache-spark - Spark 任务不可序列化 Hadoop-MongoDB-Connector 安然

c# - 按 CultureInfo 格式化字符串