簡體   English   中英

使用多個對象反序列化 json 字符串

[英]Deserialize json string with multiple objects

在調用 API 后,我有以下 JSON 響應:

{
   "Item": "Some value",
   "Status": "ST",
   "Details": "something here...",
   "TargetObject": [
      {
         "Value1": "1",
         "Value2": [
            {
               "ABC1": "......",
               "ABC2": "...",
               "ABC3": "..."
            }
         ],
         "Value3": [
            {
               "ABCD1": "......",
               "ABCD2": "...",
               "ABCD3": [
                  {
                     "ABCVal": "123"
                  },
                  {
                     "Extra": "123"
                  }
               ]
            }
         ]
      }
   ]
}

我想要做的是從TargetObject返回值,但是這個鍵里面有多個對象/數組所以我的問題是:我怎樣才能只返回這些值並打印以下 JSON 結果:

{
   "TargetObject": [
      { 
        "Value1": "1",
        "Value2": [
           {
              "ABC1": "......",
              "ABC2": "...",
              "ABC3": "..."
           }
        ],
        "Value3": [
           {
              "ABCD1": "......",
              "ABCD2": "...",
              "ABCD3": [
                 {
                    "ABCVal": "123"
                 },
                 {
                    "Extra": "123"
                 }
              ]
           }
        ]
     }
   ]
}

這是我嘗試過的:

public async Task<List<List<MyModel>>> GetAsync(string url)
{
    /*
        Code to get the above JSON
    */
    
    //Trying to return the expected JSON
    return JsonConvert.DeserializeObject<List<List<MyModel>>>(jsonString);
}

這是我的 Model:

public class MyModel
{
    public string TargetObject { get; set; }
    public string Value1 { get; set; }
    public string Value2 { get; set; }
    public string ABC1 { get; set; }
    public string ABC2 { get; set; }
    public string ABC3 { get; set; }
    public string Value3 { get; set; }
    public string ABCD1 { get; set; }
    public string ABCD2 { get; set; }
    public string ABCD3 { get; set; }
    public string ABCVal { get; set; }
    public string Extra { get; set; }
}

目前我收到以下錯誤:

Newtonsoft.Json.JsonSerializationException: Cannot deserialize the current JSON object (eg {"name":"value"}) into type 'System.Collections.Generic.List`1[myProjectNamespace.Models.MyModel]' because the type requires a JSON數組(例如 [1,2,3])正確反序列化。

動態object呢?

     public async Task<dynamic> GetAsync(string url)
     {
      /*
          Code to get the above JSON
      */     
      return Newtonsoft.Json.JsonConvert.DeserializeObject(res);
     }

PS:安裝Newtonsoft.Json

如果您有強類型 JSON 那么您需要創建一些模型 (DTO) 來表示 JSON 的結構。 注意: ABCD3Value2Value3中有不同的類型,您應該根據您的數據自行定義

public class Root
{
    public List<TargetObject> TargetObject { get; set; } 
}
public class TargetObject
{
    public string Value1 { get; set; } 
    public List<Value2> Value2 { get; set; } 
    public List<Value3> Value3 { get; set; } 
}
public class Value2
{
    public string ABC1 { get; set; } 
    public string ABC2 { get; set; } 
    public string ABC3 { get; set; } 
}
public class Value3
{
    public string ABCD1 { get; set; } 
    public string ABCD2 { get; set; } 
    public List<ABCD3> ABCD3 { get; set; } 
}
public class ABCD3
{
    public string ABCVal { get; set; } 
    public string Extra { get; set; } 
}

然后

 return JsonConvert.DeserializeObject<Root>(jsonString);

如果您只需要將TargetObject的內容作為string獲取,請使用:

var jsonDoc = JsonDocument.Parse(jsonString);
var targetObject = jsonDoc.RootElement.GetProperty("TargetObject").GetRawText();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM