2016-04-26 6 views
0

Ich verwende den ACE-Code-Editor, um Json zu sammeln und an meine Anwendung zu senden. Sobald der Json die Anwendung schlägt, muss ich sicherstellen, dass es bestimmte Schlüssel im JSON gibt, also verwende ich JsonConvert.DeserisalizeObject<t>, um dies zu tun. Hier ist, wie:Versuchen, eine JSON-Datei für die richtigen Parameter zu überprüfen mit JsonConvert.DeserisalizeObject <t>

public void SubmitReport(string JsonStringSend) 
    { 
     try 
     { 
      ReportItem RptItem = JsonConvert.DeserializeObject<ReportItem>(JsonStringSend); 

     } 
     catch(err) 
     { 
      return View(err); 
     } 

    } 

und:

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

Aber aus irgendeinem Grund, es richtig über den Fang springt auch wenn ich sicher, einige der Schlüssel des nicht korrekt sind. Verstehe ich nicht die korrekte Verwendung JsonConvert.DeserisalizeObject<t>? Oder gibt es einen besseren Weg, diese Überprüfung durchzuführen?

Antwort

0

Standardmäßig versucht der Deserializer, das Objekt zu deserialisieren. Aber JSon.NET unterstützt die Validierung, der "unkomplizierte" Weg ist wahrscheinlich JSon Schema: http://www.newtonsoft.com/jsonschema.

Einfach Fall kann direkt mit JSon.NET behandelt werden:

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

Dies bestätigt nur die Json, es lässt sich aber nicht, dass bestimmte Schlüssel in der json sind das, was ich brauche. –

+0

Sie meinen, Pflichtfelder? Es bestätigt das. Verwenden Sie "erforderlich": http://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.4.3 – Nikolay

+0

Da ich schon ein Model gebaut hatte, wollte ich nicht haben um auch ein Schema zu erstellen. Ich dachte, ich könnte einfach das Modell verwenden und darauf basierend validieren. –