using System.Collections.Generic;
using Newtonsoft.Json.Linq;
public static void Main()
""name"": ""objectProp"",
var root = JsonConvert.DeserializeObject<RootObject>(json);
Console.WriteLine("Root version: " + root.Version);
Console.WriteLine("Versioned files:");
foreach (var vf in root.VersionedFiles)
Console.WriteLine(" Key: " + vf.Key);
Console.WriteLine(" Label: " + (vf.Label ?? "(none)"));
Console.WriteLine(" Items:");
foreach (var item in vf.Items)
Console.WriteLine(" Version: " + item.Version);
Console.WriteLine(" Fields:");
foreach (var field in item.Fields)
Console.WriteLine(" Field name: " + field.Name);
Console.WriteLine(" Field type: " + field.Type);
public int Version { get; set; }
[JsonProperty("versioned_files")]
public List<VersionedFile> VersionedFiles { get; set; }
[JsonConverter(typeof(VersionedFileConverter))]
public string Key { get; set; }
public string Label { get; set; }
public List<Item> Items { get; set; }
public int Version { get; set; }
public List<Field> Fields { get; set; }
public List<object> Localised { get; set; }
public string Name { get; set; }
public string Type { get; set; }
public class VersionedFileConverter : JsonConverter
public override bool CanConvert(Type objectType)
return objectType == typeof(VersionedFile);
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
JObject obj = JObject.Load(reader);
JProperty prop = obj.Properties().First();
VersionedFile file = new VersionedFile
JArray array = (JArray)prop.Value;
if (array[0].Type == JTokenType.String)
file.Label = (string)array[0];
file.Items = array[1].ToObject<List<Item>>(serializer);
file.Items = array.ToObject<List<Item>>(serializer);
public override bool CanWrite
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
throw new NotImplementedException();