Я использую .NET JavascriptSerializer
для десериализации JSON в объекты времени выполнения, и по большей части сопоставление между полями JSON и полями объектов было автоматическим. Однако я столкнулся со следующим сценарием и хотел бы получить совет, как с ним справиться.
Представьте, что у нас есть JSON-представление формы, которая может быть квадратом или кругом. Например,
{"ShapeType":"Circle","Shape":{"Color":"Blue", "Radius":"5.3"}}
или
{"ShapeType":"Square","Shape":{"Color":"Red", "Side":"2.1"}}
Эти строки JSON смоделированы по иерархии классов, показанной ниже.
class ShapePacket
{
public string ShapeType; // either "Square" or "Circle"
public Shape Shape;
}
class Shape // all Shapes have a Color
{
public string Color;
}
class Square : Shape
{
public float Side;
}
class Circle : Shape
{
public float Radius;
}
Простой вызов JavascriptSerializer. Deserialize
не работает в этом случае, когда задействован вариантный тип. Есть ли способ уговорить JavascriptSerializer
десериализовать, несмотря на «ветвь» в моем типе данных? Я также открыт для сторонних решений.