是否可以将JSON对象反序列化为自定义类型,以字符串形式传递?

时间:2014-04-15 11:05:48

标签: c# json reflection json.net

假设我的数据库中有一个表,它将对象的类型存储为字符串,对象的序列化数据存储为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” - 这就是我真正想要的。

现在,我想到了......我想这是不可能的,而且相当无用;]我猜这就是“动态”对象的用途。

非常感谢,对不起那个无用的问题感到抱歉。

最好的问候。

2 个答案:

答案 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);
相关问题