反序列化 JSON 列表

本文关键字:列表 JSON 反序列化 | 更新日期: 2023-09-27 18:35:24

我正在尝试使用JsonConvert反序列化一些Json。我想处理的 JSON 示例是:

 2  {
 3    'Name': 'Product 1',
 4    'ExpiryDate': '2000-12-29T00:00Z',
 5    'Price': 99.95,
 6    'Sizes':{ 'Tall': 30
                'ExtraTall':40
              }
 7  },
 8  {
 9    'Name': 'Product 2',
10    'ExpiryDate': '2009-07-31T00:00Z',
11    'Price': 12.50,
12    'Sizes': null
13  }

我已经尝试了一些东西,例如:

var handlerLocal= JsonConvert.DeserializeObject <Dictionary <string,Dictionary<string,string>>>(z);

到目前为止,我只使用这个处理简单的列表:

var handlerLocal = JsonConvert.DeserializeObject<FriendsHandler>(z);

FriendHandler 就像一个模型一样工作。但是在这个新案例中,我有一个列表,这正在杀死我。

有人可以帮助我吗?此致敬意

反序列化 JSON 列表

一般来说,对于

JSON.net,你可以只编写一个与你正确解析的内容匹配的对象,然后像你一样使用反序列化对象。

在这种情况下,您提供的 JSON 无效。如果它看起来像这样,它将是一个字典:

{'thing1': {
    'Name': 'Product 1',
    'ExpiryDate': '2000-12-29T00:00Z',
    'Price': 99.95,
    'Sizes':{ 'Tall': 30
                'ExtraTall':40
              }
  },
  'thing2': {
    'Name': 'Product 2',
    'ExpiryDate': '2009-07-31T00:00Z',
    'Price': 12.50,
    'Sizes': null
  }}
我认为它应该

是一个数组,这意味着它应该被[]包围。

要解析它,只需这样做:

var handlerLocal = JArray.Parse(z).ToObject<List<FriendsHandler>>();

尝试反序列化 JSON 时,我发现最好使用 Json2Sharp.com 来创建包含数据的类,但是您提供的 JSON 无效,因此无法从中创建类。

如果您能找到一些有效的 JSON 来使用,此工具将为您处理其余的工作。

创建如下模型:

public class Product
{
    public string Name { get; set; }
    public DateTime ExpiryDate { get; set; }
    public decimal Price { get; set; }
    public Dictionary<string, int> Sizes { get; set; }
}

获取您的 JSON

var productsJson = << Call some repo that returns json string >>

然后打电话

var products = JsonConvert.DeserializeObject<List<Product>>(productsJson);

注意:您需要先使您的 JSON 有效,目前语法不正确

******编辑*******

问题需要更新(见评论),您的模型如下所示

public class Self
{
    public string DeviceID { get; set; }
    public string TimeStamp { get; set; }
}
public class Location
{
    public string RoomID { get; set; }
    public string Room { get; set; }
}
public class Friend
{
    public string IdUser { get; set; }
    public string Name { get; set; }
    public Location Location { get; set; }
}
public class RootObject
{
    public Self Self { get; set; }
    public List<Friend> Friends { get; set; }
}

然后

var products = JsonConvert.DeserializeObject<RootObject>(productsJson);