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

C# 我可以确定newtonsoft是否可以反序列化该字符串吗?,c#,json.net,C#,Json.net,在我的应用程序中,我使用newtonsoft来序列化和反序列化对象,我想知道是否有任何内置API来确定输入字符串是否可以反序列化到特定对象 public TObject Deserialize<TObject>(string serialized) { /// I want check the condition, and if is not serialized string just return default(TObject) return J

在我的应用程序中,我使用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);
}
public-TObject反序列化(字符串序列化)
{   
///我想检查条件,如果不是序列化字符串,只需返回默认值(TObject)
返回JsonConvert.DeserializeObject(序列化);
}
我不想使用
try catch
。目前我是这样实现的,但希望在开始反序列化对象之前找到一种验证字符串的方法


我已经看到了这个问题,但这不是我的答案,因为我没有任何特定的模式,JSON格式可以动态更改。

截至当前版本,JSON.Net中没有
TryParse
。如果您没有要验证的已知模式,并且不想使用
try…catch
,那么我看到的唯一其他选项是将错误处理程序附加到序列化程序,并将其用作检测和/或处理错误的方法。请参阅文档中的。

使用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;
        }
    }

在我的场景中效果很好

嗯。。。医生们什么都没说,但实验有什么问题?给它输入损坏的数据,看看它的反应如何。我打赌它要么引发异常,要么返回null(可能
default(T)
来处理结构)。在后一种情况下,如果引发异常
try
并返回
default()
,则无需执行任何操作。我不想使用try-catch。目前我是这样实现的,但是我想在开始反序列化object之前找到一种验证字符串的方法,为什么不使用
try-catch
?为什么要在解析JSON之前解析它?JSON也可能是有效的,但由于许多原因不能反序列化到
TObject
。只需使用异常来处理无效输入,或者确切地解释为什么不想使用
try-catch
@Alexander-sure,但我要问的是OP。无效JSON是否是异常取决于用例,
try…
方法很可能会在内部吞下异常。作为用户,您可能希望看到实际的异常,而不是
false
null
检查。如果只是输入验证,OP,但是根据模式有效的JSON仍然可能失败,例如当它没有映射到目标类时。@CodeCaster实际上支持
TryAction
习惯用法的类会以另一种方式进行<代码>操作在内部使用
TryAction
,如果失败,则引发异常。问题是要避免执行路径中出现异常,因为这会带来成本,所以使用一个额外的
if
来检查我们是否应该抛出异常并不那么痛苦,而且执行路径无论如何都会变得混乱。在
Try
中隐藏异常会破坏它的主要目的,即不改变语义,而是避免执行路径中的
Try…catch
。无论如何,选择的OP软件不支持它,所以他们需要解决。你的建议非常干净。谢谢你的想法真是太神奇了这不在包装里有意思。。。我不知道是否有可能(或者我忘了)使用catch without exception语句。如果我不想捕获任何内容,我总是使用不带变量的
catch(Exception)