反序列化泛型类型无法正常工作

时间:2018-02-15 12:08:37

标签: c# json

我使用下面的方法反序列化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。

出于某种原因,我仍然没有在我的代码中发现任何错误。

2 个答案:

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