反序列化接口的实现

时间:2014-03-24 04:45:39

标签: c# serialization types json.net deserialization

JSON.NET deserialize to object with Type parameter类似,我需要反序列化一些先前已经序列化的JSON:

序列化代码:

...
Data = new ImplementationofICommandData{ Id = Id }
DataType = typeof(ImplementationofICommandData).AssemblyQualifiedName,
...

反序列化代码:

...
(ICommandData)JsonConvert.DeserializeObject(dto.Data, Type.GetType(dto.DataType))
...

在这种情况下,dto.DataType包含AssemblyFullName。

最初,包含序列化和反序列化的项目共享一个带有DTO的项目,因此反序列化能够为该类型使用相同的AssemblyQualifiedName。

现在,我有一个将数据序列化到数据库的新项目。我在原始共享项目中有一个DTO,它与新项目中的DTO具有完全相同的结构,但由于处于不同的程序集中,序列化的AssemblyQualified名称与反序列化代码知道的类型不对应

理想情况下,我不必使序列化和反序列化代码共享相同的DTO项目,因此是否可以通过少于AssemblyQualifiedName的类型获取类型?或者有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

就目前而言,我添加了一个默认的命名空间/程序集来搜索一个裸类名。这可以扩展为允许一个非hack方法注册一个命名空间/程序集列表,在这个方法中搜索DTO类,所有这些都包含在某种解析器类中。