簡體   English   中英

使用Json.Net反序列化對象數組

[英]Deserializing an array of objects with Json.Net

收到的數據是這樣的:

在此輸入圖像描述

在每個項目中,有一個對象, customer ,我有一個相同的類。 如何使用Json.net轉換它們?

我試過以下幾點:

var data = JsonConvert.DeserializeObject<List<customer>>(val);

並添加另一個類:

public class customerJson
{
    public Customer customer{ get; set; }
}

並嘗試反序列化它:

var data = JsonConvert.DeserializeObject<List<customerJson>>(val);

有了這兩個我得到一個例外:

無法將當前JSON對象(例如{“name”:“value”})反序列化為類型'System.Collections.Generic.List`1 [customer]',因為該類型需要JSON數組(例如[1,2,3] )正確反序列化。 要修復此錯誤,請將JSON更改為JSON數組(例如[1,2,3])或更改反序列化類型,使其成為普通的.NET類型(例如,不是像整數這樣的基本類型,而不是類似的集合類型可以從JSON對象反序列化的數組或List。 JsonObjectAttribute也可以添加到類型中以強制它從JSON對象反序列化。 路徑'rows',第1行,第8位。

數據:

{"rows":[{"id":"232333","name":"nam"},{"id":"3434444","name":"2ndName"}]}

如果我正確讀取你的json數據結構你會想要這個:

public class Root
{
    public List<Customer> rows { get; set; }
}

var data = JsonConvert.DeserializeObject<Root>(val);

經過測試的代碼:

void Main()
{
    var test = JsonConvert.DeserializeObject<Root>("{\"rows\":[{\"id\":\"232333\",\"name\":\"nam\"},{\"id\":\"3434444\",\"name\":\"2ndName\"}]}");

    Console.WriteLine(test.rows[0].id); // prints 232333
}

public class Customer
{
    public int id { get; set; }
}

public class Root
{
    public List<Customer> rows { get; set; }
}

以防任何人仍有問題。 這對我有用:

如果Json看起來像這樣:

"result": [
        {
            "firstname": "John",
            "lastname": "Doe",

        }, 
        {
            "firstname": "Max",
            "lastname": "Mustermann",
        }
    ]

ResultList.cs

public class ResultList {

  [JsonProperty("result")]
  public List<ResultObj> ResultObj { get; set }

}

ResultObj.cs

public class ResultObj {

  [JsonProperty("firstname")]
  public string FirstName { get; set; }

  [JsonProperty("lastname")]
  public string LastName{ get; set; }

}

最后:

using Newtonsoft.Json;

var resultList = JsonConvert.DeserializeObject<ResultList>(jsonString);

暫無
暫無

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

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