我正在为游戏设计逐项系统。我正在创建一堆接口(IItem,IConsumable,IEquipable,IWeapon等等)来定义哪些类型的功能可能与项目然后一些类(武器,药水等...)定义实际项目类型。
现在,在保存播放器时,数据将作为JSON文件存储(使用JSON.NET库),并包含将包含这些项目的播放器库存。问题是,当我在读取文件时尝试将JSON文件反序列化为对象时,我如何能够告诉JSON.NET库这是什么类型的类?
我想到并且没有时间尝试的一件事是,所有被序列化为JSON的对象都有一个与JSON.NET库一起使用的对象的DTO版本。我想尝试的可能是我可以在DTO中添加一个名为ClassType的属性,然后在将文件读入应用程序时,我会首先将该对象作为匿名类型读取。然后基于ClassType属性,我会将其转换为正确的类型。我对此有两个问题:1。这似乎是一个非常丑陋的解决方案2.我甚至不确定这是否可行。
答案 0 :(得分:1)
(从this question复制)
在这种情况下,我无法控制传入的JSON(因此无法确保它包含$ type属性)我编写了一个自定义转换器,只允许您明确指定具体类型:
public class Model
{
[JsonConverter(typeof(ConcreteTypeConverter<Something>))]
public ISomething TheThing { get; set; }
}
这只是使用Json.Net中的默认序列化程序实现,同时明确指定具体类型。
this blog post上提供了源代码和概述。
答案 1 :(得分:0)
序列化时应该知道具体类型。所以你可以使用TypeNameHandling
的JSON.NET。