C# 我可以确定newtonsoft是否可以反序列化该字符串吗?
在我的应用程序中,我使用newtonsoft来序列化和反序列化对象,我想知道是否有任何内置API来确定输入字符串是否可以反序列化到特定对象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
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)
。