I. *_*edy 5 .net c# json javascriptserializer
我正在使用.NET JavascriptSerializer将JSON反序列化为运行时对象,并且在大多数情况下,JSON字段和对象字段之间的映射是自动的.但是,我面临以下情况,并欢迎有关如何处理它的建议.
想象一下,我们有一个Shape的JSON表示,可以是Square或Circle.例如,
{"ShapeType":"Circle","Shape":{"Color":"Blue", "Radius":"5.3"}}
Run Code Online (Sandbox Code Playgroud)
要么
{"ShapeType":"Square","Shape":{"Color":"Red", "Side":"2.1"}}
Run Code Online (Sandbox Code Playgroud)
这些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;
}
Run Code Online (Sandbox Code Playgroud)
JavascriptSerializer.Deserialize在这种情况下,简单地调用不起作用,其中涉及变体类型.有没有办法哄骗JavascriptSerializer反序列化尽管我的数据类型中的"分支"?我也对第三方解决方案持开放态度.
数据类型中的分支可能需要代码中的分支。我不相信除了明确的方式之外还有其他方法可以做到这一点。
我会分两步完成此操作:
首先,使用以下命令将传入的 JSON 对象转换为无类型哈希JsonConvert.DeserializeObject
然后,手动在“ShapeType”字段上分支以选择适当的Shape类(Square或Circle),并自行构造一个实例。
(这里为后代提供了明确的解决方案,尽管我怀疑您不需要我的帮助;)