- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 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,每个项目都有两个属性 firstName
和 lastName
.
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/
这个问题已经有答案了: JsonConvert.DeserializeObject could not convert string to DateTime when using non-us dat
我有一个如下所示的 JSON 响应 { "msg": "1", "code": "2", "data": [ { "a": "3",
我想在我的应用程序加载时使用 JSON.Net 来处理配置文件的解析。将所有 KVP 保持在同一范围内绝对没问题。但是,我想将其分解为子类别,例如 Settings.WebServer、Setting
这个问题在这里已经有了答案: Deserializing nested JSON structure to a flattened class with Json.NET using annotat
我知道有很多关于 JSON 的问题遍布整个互联网和 StackOverflow。但是我无法让我的 JSON 正常工作,所以我希望我能在这里得到一些帮助。[使用 C#、Visual Studio] 我有
所有这些都来自https://github.com/JamesNK/Newtonsoft.Json/issues/469 发在这里是因为我先是在SO上看,没有看到任何东西,所以我在项目的GitHub页
我收到一个无效的强制转换异常,表明指定的强制转换无效。在这条线上: RootObject mountain = JsonConvert.DeserializeObject(json1); 来自docu
我有以下来自 Web 服务的 JSON 对象 { "room":{ "name":"Thunderdome", "created_at":"2012/04/15 00:3
我想将我现有的枚举属性标记为过时并添加新的以实现相同的功能。因此,我的项目中有两个枚举(新的和标记过时的)可用。 在使用 jsonconvert.deserializeobject 函数序列化此枚举值
我从网络请求中获取一个 JSON 编码的字符串。 字符串像这样返回 "{\"key\":\"value\"}" 当我尝试使用来自 JsonConvert 的 DeserializeObject 解析它
这个问题在这里已经有了答案: Json.NET case-sensitive deserialization (1 个回答) 关闭 6 年前。 我正在尝试将字符串内容反序列化为对象,但我希望内容区分
我有一些继承,需要自定义 JsonConverter 进行反序列化。我现在使用一种非常直接的方法,根据某些属性的存在来确定类型。 重要说明:在我的实际代码中,我无法触及DeserializeObjec
我有这样的 json 字符串输出: 字符串 apiResult = { "error":[], "result":{ "RARAGA":{ "a":["4",
这个问题在这里已经有了答案: Detect if deserialized object is missing a field with the JsonConvert class in Json.N
我有一个来自网络服务的结果,字符串结果是: {"status":"success","data":{"address":"aa@aa.aa","unconfirmed":[{"tx":"cb2f252
Newtonsoft.Json.DeserializeObject 会抛出哪些异常?我想处理它们。 http://james.newtonking.com/json/help/?topic=html/
我有以下类定义: public class Tag { public Guid? TagId { get; set; } public string TagText { get; se
我正在编写一个解决方案,其中包含一个 ASP.NET Web API (.NET 4.6.2)(又名后端)、一个 Web API 客户端实现 PCL(即中间件)和 Xamarin.Forms 项目(即
我有这个对象 public class ConversationAPI { [JsonProperty(PropertyName = "lU")] public DateTime La
在 Xamarin 项目中,我有包含以下代码的 PCL 库。 我们定义一个 ConcurrentQueue .消费者在对象初始化时为此 Task已附上: _syncConsumer = new Tas
我是一名优秀的程序员,十分优秀!