在不知道其类型的情况下反序列化实体

时间:2016-08-12 07:10:56

标签: c# json generics

我在项目中遇到了这个问题,我从表中得到一个json字符串,它是一个序列化的实体。

的Json

{
"Entity":{
"__type":"Book:#Definition",
"BookId":3,
"BookName":"Meloon Dreams",
"Type":2,
"Price":35
}
}

图书类

namespace Definition
{
   [DataContract]
   public class Book : IEntity
   {
       [DataMember]
       public int BookId { get; set; }

       [DataMember]
       public string BookName { get; set; }

       [DataMember]
       public BookType Type { get; set; }

       [DataMember]
       public decimal Price { get; set; }
   }
}

工作流程类

public class Workflow
{
    public int WorkflowId { get; set; }

    public IEntity Entity { get; set; }
}

因此,在控制器类中,我从表中获取json字符串,我想将其反序列化为自己的类型。但是,只有json字符串中的 __ type 可以帮助我处理它的类型。我的意思是

workflow.Entity = Serializer.JsonDeserialize<IEntity>(jsonString);

我需要输入预订而不是 IEntity

这是否可以在不改变类结构的情况下实现,或者是否可以从json获取类型并将其转换为类型并将其替换为IEntity?

1 个答案:

答案 0 :(得分:0)

如果我正确理解了这个问题,你想要实例化动态指定泛型类型的泛型类。可以用反射来做到这一点:

ps -ef | grep index.js

这里的关键部分是MethodInfo.MakeGenericMethod method