c# – 如何处理JSON和变体对象?

我正在使用.NET的JavascriptSerializer将JSON反序列化为运行时对象,并且在大多数情况下,JSON字段和对象字段之间的映射是自动的.但是,我面临以下情况,并欢迎有关如何处理它的建议.

想象一下,我们有一个Shape的JSON表示,可以是Square或Circle.例如,

{"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反序列化,尽管我的数据类型中有“分支”?我也对第三方解决方案持开放态度.

最佳答案
数据类型中的分支可能需要在代码中使用分支.除了明确的方式,我不相信有办法做到这一点.

我会分两步完成:

首先,使用JsonConvert.DeserializeObject将传入的JSON对象转换为无类型哈希

然后,手动分支’ShapeType’字段以选择适当的Shape类(Square或Circle),并自己构造一个实例.

(明确的解决方案包括在这里为后代,虽然我怀疑你不需要我的帮助;)

转载注明原文:c# – 如何处理JSON和变体对象? - 代码日志