簡體   English   中英

反序列化JSON對象會引發Newtonsoft.Json.JsonSerializationException

[英]Deserializing JSON object throws a Newtonsoft.Json.JsonSerializationException

我有這個Json對象:

{
   "Sheet1": [
      {
         "one": 1,
         "two": 18
      },
      {
         "one": 16,
         "two": 33
      },
      {
         "one": 17,
         "two": 34
      }
   ]
}

我正在嘗試使用以下模型反序列化它:

public class Sheets
{
    [JsonProperty("Sheet1")]
    public Sheet Sheet { get; set; }
}

public class Sheet
{
    public List<Row> Rows { get; set; }
}

public class Row
{
    [JsonProperty("one")]
    public string Col1 { get; set; }

    [JsonProperty("two")]
    public string Col2 { get; set; }
}

var res = JsonConvert.DeserializeObject<Sheets>(result);

但我得到這個例外:

Newtonsoft.Json.dll中發生了類型為'Newtonsoft.Json.JsonSerializationException'的未處理異常

附加信息:無法將當前JSON數組(例如[1,2,3])反序列化為類型'ExcelConsoleApp.Sheet',因為該類型需要JSON對象(例如{“ name”:“ value”})才能正確反序列化。

我究竟做錯了什么? 有什么想法嗎?

編輯

一種可能的解決方案是使用

dynamic dynamicObject = JsonConvert.DeserializeObject(result);

但我想直接將其反序列化到模型中。

Sheet1 不是工作表類型,而是行列表 可以通過方括號來識別。
"Sheet1": [這是Collection的清晰符號,而不是由{標識的Object。

將工作更改為以下內容:

public class Sheets
{
    [JsonProperty("Sheet1")]
    public List<Row> Sheet { get; set; }
}

這是您需要的模型,我對其進行了測試,並且它完全可以按照您的要求工作。 無需更改JSON結構。

public class SheetRoot
{
    [JsonProperty("Sheet1")]
    public List<Row> Sheet { get; set; }
}

public class Row
{
    [JsonProperty("one")]
    public int Col1 { get; set; }

    [JsonProperty("two")]
    public int Col2 { get; set; }
}

var res = JsonConvert.DeserializeObject<SheetRoot>(s);

如錯誤所示,您應該使用列表而不是Sheet類。 嘗試這個:

     {"Sheets" :
       { 
       "Sheet1": [
          {
             "one": 1,
             "two": 18
          },
          {
             "one": 16,
             "two": 33
          },
          {
             "one": 17,
             "two": 34
          }
       ]
     }
    }

您的結構不兼容。

從JSON Sheet1[i].two ,示例對象可以遍歷為Sheet1[i].oneSheet1[i].two i是索引。 而您發布的C#模型將作為SheetsObj.Sheet.Row[i].Col1

您可以嘗試更改JSON或模型。 因此,也許將JSON更改為

{
    "Sheet1" : {
        "Rows": [
            {
             "one": 1,
             "two": 18
            },
            {
             "one": 16,
             "two": 33
            },
            {
             "one": 17,
             "two": 34
            }
       ]
    }
}

暫無
暫無

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

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