我正在使用ACE代码编辑器来收集Json并将其发送到我的应用程序。 一旦 Json 命中应用程序,我需要确保 json 中有某些键,所以我使用 JsonConvert.DeserisalizeObject<t>
来执行此操作。 方法如下:
public void SubmitReport(string JsonStringSend)
{
try
{
ReportItem RptItem = JsonConvert.DeserializeObject<ReportItem>(JsonStringSend);
}
catch(err)
{
return View(err);
}
}
和:
public class ReportItem
{
public Guid ReportID;
public bool RequiresFilter;
public string MimeType { get; set; }
public string ExternalID { get; set; }
public DateTime CreatedBy { get; set; }
public string ExecutionScript { get; set; }
public string ExecutionParameter { get; set; }
public string ExecutionOrderBy { get; set; }
public List<DynamicFilter> DynamicFilters { get; set; }
public bool RequiresOrgID { get; set; }
public QueryFilter ReportFilter { get; set; }
public QueryRule ReportRules { get; set; }
public List<QueryColumn> Columns { get; set; }
}
但是出于某种原因,即使我确定某些键不正确,它也会在捕获物上反弹。 我不了解正确的用法JsonConvert.DeserisalizeObject<t>
吗? 或者,有没有更好的方法来执行此检查?
默认情况下,反序列化程序"尽力"反序列化对象。但是 JSon.NET 支持验证,"直接"的方式可能是JSon Schema:http://www.newtonsoft.com/jsonschema。
简单的案例可以直接用 JSon.NET 处理:
public class ReportItem
{
[JsonProperty(Required = Required.Always)]
public bool RequiresFilter;
[JsonProperty(Required = Required.Always)]
public string MimeType { get; set; }
public DateTime CreatedBy { get; set; }
public string ExecutionScript { get; set; }
public string ExecutionParameter { get; set; }
public string ExecutionOrderBy { get; set; }
public bool RequiresOrgID { get; set; }
}