簡體   English   中英

嵌套的Json反序列化c#

[英]Nested Json deserialize c#

我有一個像這樣的json字符串;

[
  {
    "ID": 123456789,
    "userInf": {
      "Name": "NameSurname1",
      "Adress": "example adress"
    },
    "price": "3898.30",
    "kdv": "701.69",
    "total": "4599,99",
    "note": "example note"
  },
  {
    "ID": 98756431,
    "userInf": {
      "Name": "NameSurname2",
      "Adress": "example address2"
    },
    "price": "1116.10",
    "kdv": "82.90",
    "total": "1199.00",
    "note": "example note2"
  }
]

並建立這樣的課程;

public partial class Sale
{
    public long ID { get; set; }
    public UserInf UserInf { get; set; }
    public string Price { get; set; }
    public string Kdv { get; set; }
    public string Total { get; set; }
    public string note { get; set; }
}

public partial class UserInf
{
    public string Name { get; set; }
    public string Adress { get; set; }
}

我用這個代碼調用json並反序列化;

var data = JsonConvert.DeserializeObject<Sale>(jsonstring);
var shapedData = Enumerable.Range(0, 1).Select(x =>
                    new
                    {
                        ID = data.ID,
                        userInf = data.UserInf.Name,
                        price = data.Price,
                        kdv = data.Kdv,
                        total = data.Total,
                        note= data.Note
                    }).ToList();

DataTable dt = ToDataTable(shapedData);
dataGridView1.DataSource = dt;

我收到錯誤 但是,如果我改變我的json並削減后半部分並刪除[,]符號代碼就完全正常。 我需要像上面那樣反序列化多個並嘗試多種方式來反序列化,但這是我到目前為止最接近的方式。

我在這一行得到了錯誤;

var data = JsonConvert.DeserializeObject<Sale>(jsonstring);

錯誤是

無法將當前JSON數組(例如[1,2,3])反序列化為類型..等等。

我知道我錯過了一些非常基本的東西,但我沒有編碼的朋友要問。 如果您能提出更好的方法,我將不勝感激。

你應該把它反序列化為集合;

JsonConvert.DeserializeObject<List<Sale>>(jsonstring);

你的linq查詢看起來像;

var shapedData = data.Select(x =>
    new
    {
       ID = x.ID,
       userInf = x.UserInf.Name,
       price = x.Price,
       kdv = x.Kdv,
       total = x.Total,
       note = x.note
    }).ToList();

你可以嘗試這樣做,不要使用var,因為你已經知道返回類型

List<Sale> data = JsonConvert.DeserializeObject<List<Sale>>(jsonstring);

作為您的字符串返回數據數組

暫無
暫無

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

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