我使用下面的方法反序列化json对象。
public static T DeserializeJson<T>(string Json)
{
if (CanDesirialize(Json))
{
return JsonConvert.DeserializeObject<T>(Json);
}
return (T)new object();
}
以及调用Deserialize方法的服务方法:
public T ExecuteService<T>()
{
// call service
return DeserializeJson<T>(rslt);
}
当我直接将类型示例People[]
传递给desirialize方法时,这工作正常。但是当我在服务方法中调用时:
var rslt = ExecuteService<People[]>();
不起作用:
异常&#34;需要数组对象&#34;
我试图在反序列化方法中捕获T类型并检查IsArray属性并返回false。
出于某种原因,我仍然没有在我的代码中发现任何错误。
答案 0 :(得分:0)
这里使用数组没有固有的问题。这是一个从代码中挤出的完整工作示例:
using Newtonsoft.Json;
using System;
class P {
static void Main() {
var obj = new P(@"[ { ""Name"":""Fred"" }, { ""Name"":""Wilma"" } ]");
var people = obj.ExecuteService<People[]>();
foreach (var person in people) {
Console.WriteLine(person.Name);
}
}
public P(string rslt) { this.rslt = rslt; }
private readonly string rslt;
public T ExecuteService<T>()
{
// call service
return DeserializeJson<T>(rslt);
}
public static T DeserializeJson<T>(string Json)
{
if (CanDesirialize(Json))
{
return JsonConvert.DeserializeObject<T>(Json);
}
return (T)new object();
}
private static bool CanDesirialize(string json) => true;
}
public class People {
public string Name { get; set; }
}
所以:如果你的代码不起作用 - 问题几乎肯定在你的特定json和对象模型中。哪个:我们没有。
答案 1 :(得分:0)
只有您的代码存在问题:
return (T)new object();
对象无法转换为People []。相反,试试这个:
return default(T);