【发布时间】:2018-03-28 16:50:42
【问题描述】:
到目前为止,我的服务使用填充的 JSON 得到了有效响应。我的问题是我应该如何解析 JSON 以便将 pAnn 放入我的对象中。我正在设计它以供将来可能使用,以防我需要将此 JSON 中的更多值分配给对象。如果有更简单的方法来解决这个问题,请告诉我。
public IEnumerable<CP> GetP()
{
string pURL, getPResult;
var handler = new HttpClientHandler();
handler.Credentials = new NetworkCredential("username", "password");
using (HttpClient client = new HttpClient(handler))
{
pURL = String.Concat(validurl + 5854);
client.BaseAddress = new Uri(pURL);
HttpResponseMessage result = client.GetAsync(client.BaseAddress).Result;
if (!result.IsSuccessStatusCode)
{
throw new WebException();
}
else
{
getPResult = result.Content.ReadAsStringAsync().Result;
}
var pDetails = JsonConvert.DeserializeObject<List<CP>>(getPResult);
IEnumerable<CP> pResults = from cOpt in pDetails
select new CP
{
pAnn = cO.pAnn
};
return pResults;
}
}
这是我的对象:
public class CP
{
public string pAnn { get; set; }
}
这是我返回的 JSON 信息:
{"data":{.... "cO":[{..... "pAnn":11111.11 .... },"errorMessages":[],"success":true}
JsonConvert.DeserializeObject 行出现错误:
Newtonsoft.Json.JsonSerializationException 发生 Message=Cannot 将当前 JSON 对象(例如 {"name":"value"})反序列化为 type 'System.Collections.Generic.List 因为该类型需要 JSON 数组(例如 [1,2,3])以正确反序列化。修复此错误 将 JSON 更改为 JSON 数组(例如 [1,2,3])或更改 反序列化类型,使其成为普通的 .NET 类型(例如,不是 像整数这样的原始类型,而不是像数组这样的集合类型或 List) 可以从 JSON 对象反序列化。 JsonObjectAttribute 也可以添加到类型中以强制它 从 JSON 对象反序列化。
【问题讨论】:
-
linq 语句除了复制原始列表并返回之外似乎没有做任何事情。我认为您可以将其删除并返回 premiumDetails。
-
You're using HttpClient wrong and it's destabilizing your software。我建议您查看Flurl.Http 或RestSharp,它们可以简化 HTTP 服务的使用并避免与 HttpClient 相关的陷阱。
-
不要在异步调用中访问
.Result。这可能会导致问题。如果您需要结果,请在方法上调用await。请阅读Async/Await - Best Practices in Asynchronous Programming。
标签: c# .net json asp.net-core