我想将字符串和类型传递给泛型方法并尝试反序列化。这就是我所拥有的:
public static T DeserializeObject<T>(string value, Type type)
{
T result = default(T);
try
{
result = JsonConvert.DeserializeObject<type>(value);
System.Diagnostics.Debug.WriteLine($"\nDeserialization Success! : { result }\n");
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine($"\nDeserialization failed with exception : { ex }\n");
}
return result;
}
我尝试调用'GroupObject'是我想要返回的类型的方法:
var deserialized = Core.Deserializer.DeserializeObject(value: response, type: GroupObject);
导致错误:
Error CS0119: Expression denotes a `type', where a `variable', `value' or `method group' was expected (CS0119)
是否可以这样做?
答案 0 :(得分:4)
您的方法不使用type
变量。
此外,要使用类型参数调用方法,请使用typeof
函数:
var deserialized = Core.Deserializer.DeserializeObject(value: response, type: typeof(GroupObject));
当然,您在这里没有提供太多信息,但根据我的经验,您正在寻找更像这样的方法:
public static T DeserializeObject<T>(string value)
{
T result = default(T);
try {
result = JsonConvert.DeserializeObject<T>(value);
}
return result;
}
被称为:
var deserialized = Core.Deserializer.DeserializeObject<GroupObject>(value: response);
答案 1 :(得分:1)
如果我理解正确的话,你根本不需要type
参数。你已经有了一个通用的,可以做到
GroupObject deserialized = Core.Deserializer.DeserializeObject<GroupObject>(response)
这也适用于任何其他类,例如
Foo foo = Core.Deserializer.DeserializeObject<Foo>(response)
P.S。我实际上并没有看到您type
。
答案 2 :(得分:0)
你根本没有在方法中使用参数type
。您实际上并不需要该参数。您可以从方法中删除该参数。
方法并尝试反序列化。这就是我所拥有的:
public static T DeserializeObject<T>(string value)
{
T result = default(T);
try
{
result = JsonConvert.DeserializeObject<T>(value);
System.Diagnostics.Debug.WriteLine($"\nDeserialization Success! : { result }\n");
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine($"\nDeserialization failed with exception : { ex }\n");
}
return result;
}
答案 3 :(得分:-1)
这是我的解决方案:
public static T DeserializeObject<T>(string inputString)
{
T result = default(T);
using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(inputString)))
{
try
{
var serializer = new DataContractJsonSerializer(typeof(T));
result = (T)serializer.ReadObject(ms);
WriteLine($"\nDeserialization Success : { result }\n");
}
catch (Exception ex)
{
WriteLine($"\nDeserialization Failed With Exception : { ex }\n");
}
}
return result;
}
'type'包含在方法调用中:
var deserialized = Core.Deserializer.DeserializeObject<GroupObject>(value: response);