使用子类反序列化JSON数据

时间:2015-08-12 05:52:35

标签: c# json deserialization json-deserialization

我多次问自己这个问题,无法提出解决方案 让我们假设有某种仓库管理软件将所有保存的产品输出为json文件。产品可以以一般形式或更具体的形式保存 例如,有两种产品:

General product: { "pid": 12345, "name": "SomeGeneralProduct" }
Special product: { "pid": 67890, "name": "SpecialProduct", "color": "green" }

可能会有更多变体,但所有变体都有pidname的共同点 现在我想解析和分析我作为json文件得到的一大堆产品 我可以去创建一个包含产品可能拥有的所有可能成员的类Product,但我认为这是浪费时间/可维护性并且可以以更多OOP方式解决。唯一的问题是到目前为止我找不到关于这个主题的任何内容。

我最终想要的是这样的:

class BaseClass
{
    public int Pid { get; set; }
    public string Name { get; set; }
}

class DerivedClass : BaseClass
{
    public string Color { get; set; }
}

string jsonProducts = "JSON-DATA-OF-PRODUCTS";
List<BaseClass> products = SomeDeserializer.Deserialize(jsonProducts);

(注意:我知道我想要的例子太简单了,但我只想说清楚,如果可能的话,我不想在主代码中加入大量的if / else或开关)

我想知道如果可能的话我该如何解决这个问题? 是否有任何图书馆可以处理这个或什么是解决这个问题的好方法?

1 个答案:

答案 0 :(得分:2)

Json .Net应该适合你。

如上所述,您可以使用方法JsonConvert.DeserializeObject()

只需设置var settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All };

设置即可

然后像这样反序列化:

List<Product> pList = JsonConvert.DeserializeObject<List<Product>>(jsonString, settings);