为了账号安全,请及时绑定邮箱和手机立即绑定

无法读取 C# 中的 Json 对象

无法读取 C# 中的 Json 对象

C#
跃然一笑 2023-08-13 16:27:10
我正在尝试解析一个 JSON 对象,如下所示,其中标头对象是随机字母数字。此外,有时 JSON 可能只包含一个对象。{  "48ce0e9a-ee27-4e7b-93a5-4f219974f62c": {    "preview": {      "FRONT": "https://123avb.jpg",      "INSIDE_TOP": "https://456ihn.jpg",      "INSIDE_BOTTOM": "https://987ung.jpg",      "BACK": "https://ikh980.jpg"    },    "print": {      "primary": "https://iifuer.pdf",      "secondary": "https://09e491.pdf"    }  },  "d767e1a6-7afe-4d17-85f7-d512a0ca0b14": {    "preview": {      "FRONT": "https://0ff7cc7.jpg",      "BACK": "https://64e7a8.jpg"    },    "print": {      "primary": "https://73fbdc.pdf"    }  }}我为这些对象创建了类:namespace FulfillmentModel{    public class Baseclass    {        public G1 G1 { get; set; }        public Env Env1 { get; set; }    }    public class Preview    {        [JsonProperty("FRONT")]        public string FRONT { get; set; }        [JsonProperty("INSIDE_TOP")]        public string INSIDE_TOP { get; set; }        [JsonProperty("INSIDE_BOTTOM")]        public string INSIDE_BOTTOM { get; set; }        [JsonProperty("BACK")]        public string BACK { get; set; }    }    public class Print    {        [JsonProperty("primary")]        public string primary { get; set; }        [JsonProperty("secondary")]        public string secondary { get; set; }    }    public class G1    {        public Preview preview { get; set; }        public Print print { get; set; }    }    public class Preview2    {        public string FRONT { get; set; }        public string BACK { get; set; }    }    public class Print2    {        public string primary { get; set; }    }    public class Env    {        public Preview2 preview { get; set; }        public Print2 print { get; set; }    }}我正在从 API 读取 JSON 对象。我正在使用以下代码将其转换为BaseClass:string Jsontring= response.Content.ReadAsStringAsync().Result;var verificationResult = JsonConvert.DeserializeObject<Baseclass>(Jsontring);但 中的对象BaseClass为空。我不确定我做错了什么。你能帮忙吗?
查看完整描述

2 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

在 JSON 中,最外层的对象中有键48ce0e9a-ee27-4e7b-93a5-4f219974f62c和。d767e1a6-7afe-4d17-85f7-d512a0ca0b14但是这些键不存在于Baseclass您要反序列化到的模型类中,该模型类包含G1Env属性。您可以用属性标记这些属性[JsonProperty],但既然您说这些键是随机的,那么处理它的更好方法是将反序列化为Dictionary<string, G1>Dictionary<Guid, G1>(或者,如果您确定字母数字键始终代表 GUID,则可以使用)。

var verificationResult = JsonConvert.DeserializeObject<Dictionary<string, G1>>(Jsontring);

现在verificationResult将包含一个字典,其中的键是来自 JSON 的随机键。每个键对应的值将是一个G1对象,其中已填充PreviewPrint对象。

演示小提琴在这里: https: //dotnetfiddle.net/kzGihd


查看完整回答
反对 回复 2023-08-13
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

您是否尝试在异步函数之前添加await?

等待响应.Content.ReadAsStringAsync()


查看完整回答
反对 回复 2023-08-13
  • 2 回答
  • 0 关注
  • 72 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信