c# – 在不知道其类型的情况下反序列化实体
发布时间:2020-12-15 21:01:34 所属栏目:百科 来源:网络整理
导读:我在我的项目中想出了这个问题,我有一个来自表的json字符串,它是一个序列化的实体. JSON {"Entity":{"__type":"Book:#Definition","BookId":3,"BookName":"Meloon Dreams","Type":2,"Price":35}} 书类 namespace Definition{ [DataContract] public class Bo
|
我在我的项目中想出了这个问题,我有一个来自表的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); 我需要把Book而不是IEntity 这是否可以在不改变类结构的情况下实现,或者是否可以从json获取类型并将其转换为类型并将其替换为IEntity? 解决方法
如果我正确理解了这个问题,你想要实例化动态指定泛型类型的泛型类.可以用反射来做到这一点:
// Load type name from json - you'll need to implement LoadTypeFromJson() method to load type name string from json
string typeName = LoadTypeFromJson();
// Get .Net Type by type name
Type entityType = Type.GetTypeByName(typeName);
// Get Serializer type
Type serializerType = typeof(Serializer);
// Get MethodInfo for Deserialize method of Serializer class
MethodInfo deserializeMethodInfo = serializerType.GetMethod("Deserialize");
// Construct Serializer.Deserialize<IEntity> method for specific IEntity
MethodInfo constructedDeserializeMethod = deserializeMethodInfo.MakeGenericMethod(entityType);
// Call constructed method
constructedDeserializeMethod.Invoke(null,new object[] { jsonString });
这里的关键部分是MethodInfo.MakeGenericMethod method (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
