我可以确定字符串是否可以被 newtonsoft 反序列化吗?

Can I determine whether the string can deserialize by newtonsoft?

在我的应用程序中,我使用 newtonsoft 来序列化和反序列化对象,我想知道是否有内置的 API 来确定输入字符串是否可以反序列化为特定对象?

public TObject Deserialize<TObject>(string serialized)
{   
    /// I want check the condition, and if is not serialized string just return default(TObject)     
    return JsonConvert.DeserializeObject<TObject>(serialized);
}

我不想使用 try catch。目前我是这样实现的,但希望在开始反序列化对象之前找到一种验证字符串的方法。

我已经看到这个问题 Deserialize json in a "TryParse" way,但这不是我的答案,因为我没有任何特定的架构,而且 JSON 格式可以动态更改。

截至当前版本,Json.Net 中没有 TryParse。如果您没有已知的模式来验证,并且您不想使用 try...catch 那么我能看到的唯一其他选择是将错误处理程序附加到序列化程序并将其用作一种手段检测 and/or 处理错误。请参阅文档中的 "Error Handling"

This thread 使用来自 Newtonsoft.Json.Schema.

的最新包实现了一个不错的 TryParse
    private static bool TryParseJSON(string json, out JObject jObject)
    {
        try
        {
            jObject = JObject.Parse(json);
            return true;
        }
        catch
        {
            jObject = null;
            return false;
        }
    }

对我的场景来说效果很好