我在我的项目中想出了这个问题,我有一个来自表的json字符串,它是一个序列化的实体.
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 });
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。