【问题标题】:Not able to read Json Object in c#无法在 C# 中读取 Json 对象
【发布时间】:2019-12-14 13:11:26
【问题描述】:

我正在尝试解析 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 中的对象为空。

我不确定我做错了什么。你能帮忙吗?

【问题讨论】:

    标签: c# asp.net json asp.net-web-api json.net


    【解决方案1】:

    在您的 JSON 中,最外面的对象中有键 48ce0e9a-ee27-4e7b-93a5-4f219974f62cd767e1a6-7afe-4d17-85f7-d512a0ca0b14。但是这些键不存在于您要反序列化到的 Baseclass 模型类中,其中包含 G1Env 属性。您可以使用[JsonProperty] 属性标记这些属性,但由于您说这些键是随机的,处理它的更好方法是反序列化为Dictionary&lt;string, G1&gt;。 (如果您确定字母数字键始终代表 GUID,您也可以使用 Dictionary&lt;Guid, G1&gt;)。

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

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

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

    【讨论】:

    • Dictionary&lt;Guid, G1&gt; 会更好。
    • @PMExtra 也许。 OP没有说钥匙是Guids(尽管它们看起来确实是);只是它们是“随机字母数字”。鉴于宽松的 goosey 规范,字符串键更安全。
    【解决方案2】:

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

    等待响应.Content.ReadAsStringAsync()

    【讨论】:

      猜你喜欢
      • 2013-07-29
      • 1970-01-01
      • 1970-01-01
      • 2016-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多