C# 使用子类反序列化JSON数据

C# 使用子类反序列化JSON数据,c#,json,deserialization,json-deserialization,C#,Json,Deserialization,Json Deserialization,我曾多次问自己这个问题,但都没有找到解决办法。 假设有某种仓库管理软件将所有保存的产品输出为json文件。产品可以以一般形式或更具体的形式保存。 例如,有两种产品: General product: { "pid": 12345, "name": "SomeGeneralProduct" } Special product: { "pid": 67890, "name": "SpecialProduct", "color": "green" } 可能还有更多的变体,但它们都有共同的pid和na

我曾多次问自己这个问题,但都没有找到解决办法。
假设有某种仓库管理软件将所有保存的产品输出为json文件。产品可以以一般形式或更具体的形式保存。
例如,有两种产品:

General product: { "pid": 12345, "name": "SomeGeneralProduct" }
Special product: { "pid": 67890, "name": "SpecialProduct", "color": "green" }
可能还有更多的变体,但它们都有共同的
pid
name

现在我想解析和分析作为json文件获得的一整套产品。
我可以创建一个类
Product
,其中包含产品可能拥有的所有可能成员,但我认为这是浪费时间/可维护性,可以用更面向对象的方式解决。唯一的问题是,到目前为止,我找不到关于这个主题的任何信息。

我最终真正想要的是这样的东西:

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);
类基类
{
公共int-Pid{get;set;}
公共字符串名称{get;set;}
}
类派生类:基类
{
公共字符串颜色{get;set;}
}
字符串jsonProducts=“JSON-DATA-OF-PRODUCTS”;
List products=SomeDeserializer.Deserialize(jsonProducts);
(注意:我知道我想要的示例太简单了,但我只想说明,如果可能的话,我不想在我的主代码中有太多的if/else或开关)

如果可能的话,我想知道如何解决这个问题?

有没有任何库可以处理这个问题,或者什么是解决这个问题的好方法?

Json.Net应该适合您

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

只需设置设置
var settings=newjsonserializersettings{typenameholling=typenameholling.All}

然后像这样反序列化:

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

如果您愿意尝试Json.NET,请参阅或。我已经在使用Json.NET,因此这没有问题:)谢谢您的参考资料,我将尝试它们。在这种情况下,这不起作用,因为我不知道条目的类型,也不会影响产品的序列化,因为我无法修改传递Json数据的软件。很抱歉,你能让它用dbc的方法工作吗?