gpt4 book ai didi

c# - 通用类型 JsonConvert.DeserializeObject>(string)

转载 作者:太空狗 更新时间:2023-10-29 21:26:23 35 4
gpt4 key购买 nike

我正在使用 Newtonsoft.JSON。我不知道传递给此方法或检索到此方法的对象类型,因此我尝试使用 DeserializeObject在一个我不知道其类型的对象上。

这可能吗?如果是这样,如何?这是我的代码。

public static List<T> GetObject<T>(string cacheKey, IEnumerable<T> obj)
{
using (HttpClient client = new HttpClient())
{
var response = client.GetAsync("http://localhost:53805/api/NonPersisted/Get/" + cacheKey).Result;

obj = JsonConvert.DeserializeObject<obj.GetType>(response.Content.ToString());
return obj.ToList();
}
}

我首先尝试使用

obj = JsonConvert.DeserializeObject<List<T>>(response.Content.ToString());

这个不行,很明显,它无法解析。获取对象的类型不会构建,它说 obj is a variable but used like a type .

编辑看来您可以使用通用的 List<T>不知道 JsonConvert.DeserializeObject<> 的类型真正的错误是 response.Content只返回类型。你需要有...

obj = JsonConvert.DeserializeObject<List<T>>(response.Content.ReadAsStringAsync().Result);

最佳答案

你可以制作GetObject没有参数的通用方法 IEnumerable<T> obj .

我建议以下解决方案,假设您知道从 URL 返回的 JSON 值的格式。

例如,URL 返回包含项目数组的 JSON,每个项目都有两个属性 firstNamelastName .

var response = "[{\"firstName\":\"Melanie\",\"lastName\":\"Acevedo\"},
{\"firstName\":\"Rich\",\"lastName\":\"Garrett\"},
{\"firstName\":\"Dominguez\",\"lastName\":\"Rose\"},
{\"firstName\":\"Louisa\",\"lastName\":\"Howell\"},
{\"firstName\":\"Stone\",\"lastName\":\"Bean\"},
{\"firstName\":\"Karen\",\"lastName\":\"Buckley\"}]";

我可以写GetObject方法如下。

public static List<T> GetObject<T>()
{
var response = "
[{\"firstName\":\"Melanie\",\"lastName\":\"Acevedo\"},
{\"firstName\":\"Rich\",\"lastName\":\"Garrett\"},
{\"firstName\":\"Dominguez\",\"lastName\":\"Rose\"},
{\"firstName\":\"Louisa\",\"lastName\":\"Howell\"},
{\"firstName\":\"Stone\",\"lastName\":\"Bean\"},
{\"firstName\":\"Karen\",\"lastName\":\"Buckley\"}]";

var obj = JsonConvert.DeserializeObject<List<T>>(response);
return obj.ToList();
}

在这里T在上面的方法中,可以使用具有属性 firstName 的任何类型和 lastName .例如

public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime DateOfBirth { get; set; }
}

public class Employee
{
public string FirstName { get; set; }
public string LastName { get; set; }
public double Salary { get; set; }
}

我可以打电话GetObject通过传递 Person 的方法或 Employee并将 JSON 字符串反序列化为这些类的对象集合,如下所示。

var persons = GetObject<Person>();

foreach (var item in persons)
{
Console.WriteLine($"{item.FirstName} {item.LastName}");
}

var employees = GetObject<Employee>();

foreach (var item in employees)
{
Console.WriteLine($"{item.FirstName} {item.LastName}");
}

总的来说,我想说的是,如果 JSON 的格式知道将适当的类型传递给 JsonConvert.Deserialize<T>应该可以正常工作。

如果传入的 JSON 表示一个集合并尝试将其反序列化为一个简单的类将会失败,反之亦然。

所以对于你的问题,如果你知道 JSON 将成为一个集合,那么使用 JsonConvert.Deserialize<List<T>>应该不会给你任何问题只要T具有可以设置来自 JSON 的值的属性。

我希望这能帮助您解决问题。

关于c# - 通用类型 JsonConvert.DeserializeObject<List<T>>(string),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44545955/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com