嵌套的Json反序列化c#

时间:2017-12-16 11:17:30

标签: c# json deserialization

我有一个像这样的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])反序列化为类型..等等。

我知道我遗漏了一些非常基本的东西,但我没有要求的编码朋友。 如果您能提出更好的方法,我将不胜感激。

2 个答案:

答案 0 :(得分:4)

您应该将其反序列化为集合;

compile 'com.github.barteksc:android-pdf-viewer:2.0.3'

你的linq查询看起来像;

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

答案 1 :(得分:1)

你可以尝试这样做,不要使用var,因为你已经知道返回类型

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

作为您的字符串返回数据数组