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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |