Estoy usando .NET JavascriptSerializer
para deserializar JSON en objetos de tiempo de ejecución y, en su mayor parte, la asignación entre campos JSON y campos de objeto ha sido automática. Sin embargo, me enfrento al siguiente escenario y agradecería consejos sobre cómo manejarlo.¿Cómo tratar con JSON y objetos variantes?
Imagine que tenemos una representación JSON de una forma, que puede ser un cuadrado o un círculo. Por ejemplo,
{"ShapeType":"Circle","Shape":{"Color":"Blue", "Radius":"5.3"}}
o
{"ShapeType":"Square","Shape":{"Color":"Red", "Side":"2.1"}}
Estas cadenas JSON son el modelo de la jerarquía de clases se muestra a continuación.
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;
}
simplemente llamando JavascriptSerializer.Deserialize
no funciona en este caso, donde hay un tipo de variante en cuestión. ¿Hay alguna manera de convencer JavascriptSerializer
para deserializar a pesar de la "rama" en mi tipo de datos? También estoy abierto a soluciones de terceros.
Parece similar a esta pregunta [serialización JSON de matriz con objetos polimórficos] (http://stackoverflow.com/questions/5186973/json-serialization-of-array-with-polymorphic-objects). – R0MANARMY