【问题标题】:Deserialization of JSON data using subclasses使用子类对 JSON 数据进行反序列化
【发布时间】:2015-11-04 13:50:01
【问题描述】:

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

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

可能还有更多变体,但都有pidname 的共同点。
现在我想解析和分析我作为 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);

(注意:我知道我想要的例子太简单了,但我只是想明确一点,如果可能的话,我不想在我的主代码中有大量的 if/else 或开关)

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

【问题讨论】:

标签: c# json deserialization json-deserialization


【解决方案1】:

Json .Net 应该适合你。

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

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

然后像这样反序列化:

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

【讨论】:

  • 这在这种情况下不起作用,因为我不知道条目的类型并且无法影响产品的序列化,因为我无法修改传递 json 数据的软件。
  • 对不起,你能不能让它和dbc的方法一起工作?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多