【发布时间】:2021-09-27 09:17:08
【问题描述】:
这是我的 JSON
{
"states": [
{
"state_id": 1,
"state_name": "Andaman and Nicobar Islands"
},
{
"state_id": 2,
"state_name": "Andhra Pradesh"
},
{
"state_id": 3,
"state_name": "Arunachal Pradesh"
},
...
{
"state_id": 36,
"state_name": "West Bengal"
}
],
"ttl": 24
}
这是我的模型类
public class State
{
[JsonConstructor]
public State(int stateId,string stateName)
{
this.StateId = stateId;
this.StateName = stateName;
}
[JsonPropertyName("state_id")]
public int StateId { get; set; }
[JsonPropertyName("state_name")]
public string StateName { get; set; }
}
public class ApiSevuModels
{
[JsonConstructor]
public ApiSevuModels(List<State> states,int ttl)
{
this.States = states;
this.Ttl = ttl;
}
[JsonPropertyName("states")]
public List<State> States { get; set; }
[JsonPropertyName("ttl")]
public int Ttl { get; set; }
}
这是我用于反序列化的 Conttoller 类
namespace ExternalApi.demo.Controllers
{
public class StatesController : Controller
{
// GET: States
public async Task<ActionResult> Index()
{
IEnumerable<State> apiStates = null;
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("https://cdn-api.co-vin.in/api/v2/admin/location/");
client.DefaultRequestHeaders.Accept.Clear();
//HTTP GET
HttpResponseMessage result = await client.GetAsync("states");
if (result.IsSuccessStatusCode)
{
var part=result.ReasonPhrase;
var content = await result.Content.ReadAsStringAsync();
apiStates=JsonConvert.DeserializeObject<IList<State>>(content);
}
else //web api sent error response
{
//log response status here..
ModelState.AddModelError(string.Empty, "Server error. Please contact administrator.");
}
}
return View(apiStates);
}
}
}
而我的问题是,在运行此代码时,我得到了像 这样的期望,因为类型需要 JSON 对象(例如 {"name" :"value"}) 正确反序列化
【问题讨论】:
-
您能否提供一个您收到的 JSON 示例。您可能会收到代表对象而不是数组的 JSON。
-
您的 JSON 代表
ApiSevuModels的一个实例,而不是State项目的集合。请改用JsonConvert.DeserializeObject<ApiSevuModels>(content)。
标签: c# json asp.net-web-api json-deserialization webapi