假设我的数据库中有一个表,它将对象的类型存储为字符串,对象的序列化数据存储为JSON。该表可以容纳许多不同的对象。
我想根据存储的类型重新创建对象,如下所示:
string typeFromDatabase = "SomeType";
string serializedData = ...some Json data here...;
var typeToCast = ...some reflection methods here...;
var myDeserializedObject = JsonConvert.DeserializeObject<typeToCast>(serializedData);
这样的事情可能吗?
提前致谢。
编辑:
我想我被误解了 - 我知道,我可以使用这样的东西:
var x = JsonConvert.DeserializeObject(sr1, typeof(SerizlizationTest1));
但在上述情况下,“x”仍然被识别为“对象”而不是“SerizlizationTest1” - 这就是我真正想要的。
现在,我想到了......我想这是不可能的,而且相当无用;]我猜这就是“动态”对象的用途。
非常感谢,对不起那个无用的问题感到抱歉。
最好的问候。
答案 0 :(得分:0)
是的,确定可以,只需使用another overload:
var myDeserizlizedObject = JsonConvert.DeserizlizeObject(serizlizedData, typeToCast);
检索类型不需要一些&#34;反射方法&#34;,使用简单:
var typeToCast = Type.GetType(typeFromDatabase);
确保该名称是完整的类型名称,例如Namespace.ClassName
。
关于您的上次更新。你怎么可能从特定类型中受益(我的意思是进一步使用新对象)?在像C#这样的强类型语言中确实看起来很荒谬:
// lets assume that var is magically becomes your typeToCast type
var myDeserizlizedObject = JsonConvert.DeserizlizeObject<typeToCast>(serizlizedData);
// imagine myDeserizlizedObject is a Car
myDeserizlizedObject.StartupEngine();
myDeserizlizedObject.Move();
// but what if it's a Bag ?
// the above code makes no sense then
要么他们有一个共同的父母,你可以通过投射以统一的方式处理它们,或者它是switch
你按类型单独处理它们。
答案 1 :(得分:0)
请尝试以下代码,它应该适合您。
using System.Web.Script.Serialization; JavaScriptSerializer oJS = new JavaScriptSerializer(); RootObject oRootObject = new RootObject(); oRootObject = oJS.Deserialize(Your JSon String);