У меня есть класс C #, который клиенты могут представлять в двух разных схемах JSON, в зависимости от контекста.
public class Point
{
[JsonProperty("x")]
public double? X { get; set; }
[JsonProperty("y")]
public double? Y { get; set; }
}
public class Multipoint
{
[JsonProperty("points")]
public List<Point> Points { get; set; }
}
, где Multipoint
- это просто список Point
.
Синтаксис JSON для Point
:
{"x" : <x>, "y" : <y>}
, который я могу успешно десериализовать с помощью Json.NET.
Однако синтаксис JSON для Multipoint
:
{"points" : [[ <x1>, <y1> ] , [ <x2>, <y2> ], ... ]}
, для которого при попытке десериализации возникает следующая ошибка:
Невозможно десериализовать текущий массив JSON (например, [1,2,3]) в тип 'Deserialization.Point', потому что типу требуется объект JSON (например, {"name": "value"}) для правильной десериализации.Чтобы исправить эту ошибку, либо измените JSON на объект JSON (например, {"name": "value"}), либо измените десериализованный тип на массив или тип, который реализует интерфейс коллекции (например, ICollection, IList), например List, который можетбыть десериализованным из массива JSON.JsonArrayAttribute также можно добавить к типу, чтобы принудительно десериализовать его из массива JSON.
Правильно, да, потому что сериализатор не знает, как назначать элементы внутреннего массива (пара ординат) к свойствам X и Y.
Таким образом, это можно сделать, создав специальный десериализатор для назначения правильной ординаты правильному свойству.Однако я не понимаю, как я могу назначить 2 разных сериализатора моему типу.