using System.Collections.Generic;
using Newtonsoft.Json.Schema;
using Newtonsoft.Json.Schema.Generation;
using Newtonsoft.Json.Linq;
public IEnumerable<Data> datasets;
public static void Main()
string jsonString = "{\"datasets\":[{\"id\":\"1\",\"label\":\"foo\",\"name\":\"boo\",\"url\":\"link1\"},{\"id\":\"2\",\"label\":\"faa\",\"name\":\"baa\",\"url\":\"link2\"}]}";
string jsonInvalid = "{\"datasets\":[{\"id\":\"1\",\"name\":\"boo\",\"url\":\"link1\"},{\"id\":\"2\",\"label\":\"faa\",\"name\":\"baa\"}]}";
string jsonNoDataset = "{\"dataset\":[{\"id\":\"1\",\"name\":\"boo\",\"url\":\"link1\"},{\"id\":\"2\",\"label\":\"faa\",\"name\":\"baa\"}]}";
JSchema schema = new JSchemaGenerator().Generate(typeof(JData));
Console.WriteLine(String.Format("jsonString IsValid: {0}", JObject.Parse(jsonString).IsValid(schema)));
Console.WriteLine(String.Format("jsonInvalid IsValid: {0}", JObject.Parse(jsonInvalid).IsValid(schema)));
JData invalid = JsonConvert.DeserializeObject<JData>(jsonInvalid);
foreach(Data d in invalid.datasets){
Console.WriteLine(String.Format("id: {0}, label: {1}, name: {2}, url: {3}", d.id, d.label, d.name, d.url));
JData noData = JsonConvert.DeserializeObject<JData>(jsonNoDataset);
if(noData.datasets != null)
foreach(Data d in noData.datasets){
Console.WriteLine(String.Format("id: {0}, label: {1}, name: {2}, url: {3}", d.id, d.label, d.name, d.url));
Console.WriteLine("datasets is not in json string");
JData jsonData = JsonConvert.DeserializeObject<JData>(jsonString);
foreach(Data d in jsonData.datasets){
Console.WriteLine(String.Format("id: {0}, label: {1}, name: {2}, url: {3}", d.id, d.label, d.name, d.url));