在C#中使用接口设计类(JSON.NET)

时间:2011-03-21 15:56:50

标签: c# json interface class-design json.net

我正在为游戏设计逐项系统。我正在创建一堆接口(IItem,IConsumable,IEquipable,IWeapon等等)来定义哪些类型的功能可能与项目然后一些类(武器,药水等...)定义实际项目类型。

现在,在保存播放器时,数据将作为JSON文件存储(使用JSON.NET库),并包含将包含这些项目的播放器库存。问题是,当我在读取文件时尝试将JSON文件反序列化为对象时,我如何能够告诉JSON.NET库这是什么类型的类?

我想到并且没有时间尝试的一件事是,所有被序列化为JSON的对象都有一个与JSON.NET库一起使用的对象的DTO版本。我想尝试的可能是我可以在DTO中添加一个名为ClassType的属性,然后在将文件读入应用程序时,我会首先将该对象作为匿名类型读取。然后基于ClassType属性,我会将其转换为正确的类型。我对此有两个问题:1。这似乎是一个非常丑陋的解决方案2.我甚至不确定这是否可行。

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)