有没有办法让函数返回我传入的对象类型?我想调用下面的一个方法来返回我传入的类型。这可能吗?我应该尝试这样做吗?有没有更好的方法......没有两种不同的方法?
目前,我尝试了前两个调用,然后我回来(第一次调用)看起来像是字典值部分中带有system.object []的字典。下面的屏幕截图可能比我的解释更好。我问这个问题,因为我可能有更多类型需要反序列化,并且不希望每个类型都有不同的方法。
var firstTry = this.Deserialize(path, typeof(ObservableCollection<ListItemPair>();
var secondTry = this.Deserialize(path, typeof(ListItemPair));
var thirdTry = this.Deserialize(path, typeof(SomeOtherObject));
public static object Deserialize(string jsonFile, object type)
{
var myObject = new object();
try
{
using (StreamReader r = new StreamReader(jsonFile))
{
var serializer = new JavaScriptSerializer();
string json = r.ReadToEnd();
myObject = serializer.Deserialize<object>(json);
}
}
catch (Exception ex)
{
}
return myObject ;
}
public class ListItemPair
{
public string Name
{
get;
set;
}
public object Value
{
get;
set;
}
}
创建对象:
答案 0 :(得分:2)
是的,您可以创建一个通用方法。您的Deserialize()
方法看起来像这样:
public static T Deserialize<T>(string jsonFile)
{
T myObject = default(T);
try
{
using (var r = new StreamReader(jsonFile))
{
var serializer = new JavaScriptSerializer();
string json = r.ReadToEnd();
myObject = serializer.Deserialize<T>(json);
}
}
catch (Exception ex)
{
}
return myObject;
}
在此示例中,T
是一个类型参数。调用此方法时,您可以传递如下类型:
var firstTry = Deserialize<ObservableCollection<ListItemPair>>(path);
var secondTry = Deserialize<ListItemPair>(path);
var thirdTry = Deserialize<SomeOtherObject>(path);
一方面注意:我不建议默默地吞咽异常。在这种情况下,预计反序列化可能会失败。因此,我会将其更改为TryDeserialize()
方法:
public static bool TryDeserialize<T>(string jsonFile, out T myObject)
{
try
{
using (var r = new StreamReader(jsonFile))
{
var serializer = new JavaScriptSerializer();
string json = r.ReadToEnd();
myObject = serializer.Deserialize<T>(json);
}
}
catch (Exception ex)
{
myObject = default(T);
return false;
}
return true;
}