Как работать с JSON и вариантными объектами?

Я использую .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 десериализовать, несмотря на «ветвь» в моем типе данных? Я также открыт для сторонних решений.

5
задан I. J. Kennedy 8 April 2011 в 17:22
поделиться