C# 解析抛出基本异常…如何处理

C# 解析抛出基本异常…如何处理,c#,json.net,C#,Json.net,使用Newtonsoft Json.NET 6.0.8,我有如下代码: public bool ValidateSchema<T>(T model, out IList<string> messages) { string stringedObject = Newtonsoft.Json.JsonConvert.SerializeObject(model, new JsonSerializerSettings()

使用Newtonsoft Json.NET 6.0.8,我有如下代码:

public bool ValidateSchema<T>(T model, out IList<string> messages)
{
        string stringedObject = Newtonsoft.Json.JsonConvert.SerializeObject(model,
            new JsonSerializerSettings()
            {
                ContractResolver = new CamelCasePropertyNamesContractResolver(),
                NullValueHandling = NullValueHandling.Include
            });

        messages = new List<string>();
        JObject objectToValidate;
        try
        {
            objectToValidate = JObject.Parse(stringedObject);
        }
        catch (Exception)
        {
            messages.Add("Unable to parse jsonObject.");
            return false;
        }

        JsonSchema schema = JsonSchemaRepository.SchemaDictionary[typeof(T)];

        return objectToValidate.IsValid(schema, out messages);
}
public bool ValidateSchema(T模型,out-IList消息)
{
string stringedObject=Newtonsoft.Json.JsonConvert.SerializeObject(模型,
新的JsonSerializerSettings()
{
ContractResolver=新的CamelCasePropertyNamesContractResolver(),
NullValueHandling=NullValueHandling。包括
});
消息=新列表();
JObject objectToValidate;
尝试
{
objectToValidate=JObject.Parse(stringedObject);
}
捕获(例外)
{
Add(“无法解析jsonObject”);
返回false;
}
JsonSchema schema=JsonSchemaRepository.SchemaDictionary[typeof(T)];
返回objectToValidate.IsValid(schema,out消息);
}
特别是try-catch块。从我的阅读来看,这个方法似乎只抛出我不想捕捉的基本异常,因为它可能隐藏所有其他重要错误

现在,Json.NETNuGet包非常专业,因此我不得不怀疑我是否错误地实现了我的解析方法,或者是否有其他关于如何处理解析错误的想法

也许是记录和重做


TIA

您可以捕获基本异常,如果它是异常的子类,则重新显示它

try
{
    objectToValidate = JObject.Parse(stringedObject);      
}
catch (Exception e)
{
    if (e.GetType().IsSubclassOf(typeof(Exception)))
        throw;

    //Handle the case when e is the base Exception
    messages.Add("Unable to parse jsonObject.");
    return false;
}

他们自己的
Parse()
方法不应该抛出其他重要错误。但你是对的;这是糟糕的代码。完全正确。我正在接管一个现有的项目,我实现了一些代码分析规则,这就出现了。1)你真的知道会抛出一个异常而不是其他异常吗?2) 我相信可以通过强制Json.NET创建无效的Json。理论上,如果读取时没有等效的转换器,解析可能会抛出一个
JsonException
。Json.NET不会(故意)抛出
System.Exception
。它抛出类型的异常(或类型的子类)。例如,在源代码中,您可以看到被抛出。如果它抛出一个原始的
异常
,可能是Json.NET.ahhh中的一个bug。那就行了!谢谢你的好主意。使用
throw则不会丢失堆栈跟踪。