我想捕获JSON.NET的CreateProperty方法中的异常,并用该属性中出现的异常替换属性的类型和消息。
这是我到目前为止所实现的目标。
class CustomResolver : DefaultContractResolver
{
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
JsonProperty property = base.CreateProperty(member, memberSerialization);
property.ShouldSerialize = instance =>
{
var prop = (PropertyInfo)member;
try
{
if (prop.CanRead)
{
prop.GetValue(instance, null);
}
}
catch(Exception exception)
{
property.PropertyType = typeof(string);
property.DefaultValue = exception.Message;
return true;
}
return true;
};
return property;
}
}
我有一堂课。
class MyClass{
public int Id {get; set;}
public decimal Amount
{
get { throw new Exception("Test Exception"); }
}
}
现在,我正在尝试序列化该对象:
var obj = new MyClass();
var convertedString = JsonConvert.SerializeObject(obj, Formatting.Indented,
new JsonSerializerSettings
{
ReferenceLoopHandling =
ReferenceLoopHandling.Ignore,
Converters = new List<JsonConverter>
{
new IsoDateTimeConverter
{
DateTimeFormat =
"yyyy-MM-dd hh:mm:ss"
}
},
ContractResolver = new CustomResolver()
});
我想要实现的目标是:
{
"Id" : 0,
"Amount" : "Test Exception"
}
但这似乎并没有奏效。任何人都可以帮我解决这个问题。
由于