Json.NET: deserialize nested arrays into strongly typed object Json.NET: deserialize nested arrays into strongly typed object json json

Json.NET: deserialize nested arrays into strongly typed object


I finally figured out how to do this. I was needed to use serializer.Deserialize inside of JsonConverter. So, here is a working example.

class Program{    static string json = @"{                                ""files"":                                [                                    ""hash string"",                                    [                                        [""first file name"", 12],                                        [""second file name"", 34]                                    ]                                ]                            }";    static void Main(string[] args)    {        RootObject container = JsonConvert.DeserializeObject<RootObject>(json);    }}public class RootObject{    [JsonProperty("files")]    public FilesContainer Container    {        get;        set;    }}[JsonConverter(typeof(FilesContainerJsonConverter))]public class FilesContainer{    public string Hash    {        get;        set;    }    public File[] Files    {        get;        set;    }}public class FilesContainerJsonConverter : JsonConverter{    public override bool CanConvert(Type objectType)    {        throw new NotImplementedException();    }    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)    {        FilesContainer obj = new FilesContainer();        obj.Hash = reader.ReadAsString();        reader.Read(); // to StartArray        obj.Files = serializer.Deserialize<File[]>(reader);        reader.Read(); // to EndArray        return obj;    }    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)    {        throw new NotImplementedException();    }}[JsonConverter(typeof(FileJsonConverter))]public class File{    public string Name    {        get;        set;    }    public int Size    {        get;        set;    }}class FileJsonConverter : JsonConverter{    public override bool CanConvert(Type objectType)    {        throw new NotImplementedException();    }    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)    {        File obj = new File        {            Name = reader.ReadAsString(),            Size = reader.ReadAsInt32().GetValueOrDefault()        };        reader.Read(); // to EndArray        return obj;    }    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)    {        throw new NotImplementedException();    }}