Я пытаюсь десериализовать объект JSON, который имеет массив неназванных массивов, и столкнулся с некоторыми проблемами. Код, который я запускаю для тестирования:
var json = "{ \"Triangles\": [[1337],[1338],[1339]]}";
var mesh = JsonConvert.DeserializeObject<Mesh>(json);
и представляющие интерес классы:
public class Mesh
{
[JsonProperty]
public Triangle[] Triangles { get; set; }
}
public class Triangle
{
[JsonProperty]
public int[] Indices { get; set; }
}
При запуске кода и попытке десериализации с помощью Newtonsoft я получаю следующее исключение:
Newtonsoft.Json.JsonSerializationException
HResult=0x80131500
Message=Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'ConsoleApp1.Triangle' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly.
To fix this error either change the JSON to a JSON object (e.g. {"name":"value"}) or change the deserialized type to an array or a type that implements a collection interface (e.g. ICollection, IList) like List<T> that can be deserialized from a JSON array. JsonArrayAttribute can also be added to the type to force it to deserialize from a JSON array.
Path 'triangles[0]', line 1, position 17.
Добавление [JsonArray] в класс Triangle приводит к следующему исключению:
Newtonsoft.Json.JsonSerializationException
HResult=0x80131500
Message=Cannot create and populate list type ConsoleApp1.Triangle. Path 'Triangles[0]', line 1, position 17.
Чего мне не хватает?
Редактировать: Важная вещь, которую я, очевидно, забылупоминалось, что я хотел бы десериализовать его в классы, перечисленные в посте по семантическим причинам. То есть, хотя десериализация треугольников в List<List<int>>
или int[][]
сработает, я бы очень предпочел не делать этого.