2016-04-26 13 views
0

我正在使用ACE代碼編輯器收集Json並將其發送給我的應用程序。一旦Json碰到應用程序,我需要確保json中有某個鍵,所以我使用JsonConvert.DeserisalizeObject<t>來做到這一點。具體方法如下:嘗試使用JsonConvert.DeserisalizeObject檢查json文件的正確參數<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>?或者,有沒有更好的方法來做這個檢查?

回答

0

默認情況下,反序列化程序「嘗試最好」反序列化對象。但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; } 
} 
+0

這正好驗證了JSON,它不會驗證某些關鍵是這是我需要的JSON。 –

+0

你的意思是,必填項?它確實證實了這一點。使用「必需」:http://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.4.3 – Nikolay

+0

由於我已經建立了一個模型,我不想有以創建一個模式。以爲我可以使用模型並基於它進行驗證。 –