【发布时间】:2022-11-14 08:17:20
【问题描述】:
鉴于这个 JSON,
{
"token": {
"accessToken": "scrciFyGuLAQn6XgKkaBWOxdZA1",
"issuedAt": "2022-11-06T22:54:27Z",
"expiresIn": 1799
}
}
如果我将模型定义为这样,我可以让DeserializeObject 工作
public class Root
{
public Token Token { get; set; }
}
public class Token
{
public string AccessToken { get; set; }
public DateTime IssuedAt { get; set; }
public int ExpiresIn { get; set; }
}
并使用此调用:
Root myRoot = JsonConvert.DeserializeObject<Root>(apiResponse);
我正在调用的第三方 API 的所有方法都返回类似的 JSON 响应,因为它有一个包含特定类型的单个对象的标头对象,例如:
{
"user": {
"preferences": {},
"address": {},
"name": {},
"email": "string",
"segmentName": "string"
}
}
这需要一个看起来像这样的模型:
public class Address
{
}
public class Name
{
}
public class Preferences
{
}
public class Root
{
public User user { get; set; }
}
public class User
{
public Preferences preferences { get; set; }
public Address address { get; set; }
public Name name { get; set; }
public string email { get; set; }
public string segmentName { get; set; }
}
我不想为每个 JSON 响应定义一个不同的 Root 类。有没有办法避免这种情况?
编辑 14/11。
另一个 JSON 响应如下所示:
{
"provider": {
"TOTAL": {
"count": 0
}
}
}
同样,它是一个包含我需要的特定对象的“空”根对象。
作为宰茨曼在他的评论中指出,通过键入 DeserializeObject 调用以使用 <Dictionary, T>,其中 T 是我所追求的实际对象(例如 Token 或 User 或 Provider),它绕过需要一个根对象。
【问题讨论】:
-
有很多方法。另一种方法是
JsonConvert.DeserializeObject<Dictionary<string, User>>()["user"] -
你的第三个 json 是什么样的?你在寻找任何可能的 json 的通用类吗?
-
@zaitsman。这对我有用。谢谢。所以我不再需要创建一个单独的根类。
标签: c# json.net json-deserialization