public override void WriteJson(Newtonsoft.Json.JsonWriter writer, object value, Newtonsoft.Json.JsonSerializer serializer) { var exception = value as System.Exception; if (exception != null) { var resolver = serializer.ContractResolver as Newtonsoft.Json.Serialization.DefaultContractResolver ?? _defaultContractResolver; var jObject = new Newtonsoft.Json.Linq.JObject(); jObject.Add(resolver.GetResolvedPropertyName("discriminator"), exception.GetType().Name); jObject.Add(resolver.GetResolvedPropertyName("Message"), exception.Message); jObject.Add(resolver.GetResolvedPropertyName("StackTrace"), _hideStackTrace ? "HIDDEN" : exception.StackTrace); jObject.Add(resolver.GetResolvedPropertyName("Source"), exception.Source); jObject.Add(resolver.GetResolvedPropertyName("InnerException"), exception.InnerException != null ? Newtonsoft.Json.Linq.JToken.FromObject(exception.InnerException, serializer) : null); foreach (var property in GetExceptionProperties(value.GetType())) { var propertyValue = property.Key.GetValue(exception); if (propertyValue != null) { jObject.AddFirst(new Newtonsoft.Json.Linq.JProperty(resolver.GetResolvedPropertyName(property.Value), Newtonsoft.Json.Linq.JToken.FromObject(propertyValue, serializer))); } } value = jObject; } serializer.Serialize(writer, value); }