在C#中使用动态项目反序列化json对象

时间:2020-06-11 13:40:31

标签: c# json.net

我有以下json文档:

{
  "name": "bert",
  "Bikes": {
    "Bike1": {
      "value": 1000,
      "type": "Trek"
    },
    "Bike2": {
      "value": 2000,
      "type": "Canyon"
    }
  }
}

可能还有其他自行车,例如Bike3 ... BikeN。我想反序列化为C#对象。问题在于,在反序列化步骤中,bikes数据会完全丢失,从而导致Bikes集合为空。

要复制的代码:

[Test]
    public void FirstCityJsonParsingTest()
    {
        var file = @"./testdata/test.json";
        var json = File.ReadAllText(file);

        var res = JsonConvert.DeserializeObject<Person>(json);
        Assert.IsTrue(res.Name == "bert");
        // next line is failing, because res.Bikes is null...
        Assert.IsTrue(res.Bikes.Count == 2);
    }

    public class Bike
    {
        public string Id { get; set; }
        public int Value { get; set; }
        public string Type { get; set; }
    }
    public class Person
    {
        public string Name { get; set; }
        public List<Bike> Bikes { get; set; }
    }

要解决此问题,必须更改使用的模型。但是,这里需要进行哪些更改才能正确填充自行车数据?

注意:更改输入文档不是一种选择(因为这是规范)

1 个答案:

答案 0 :(得分:5)

您的代码结构不反映您的json,请尝试以下操作:

public class Bike
{
    public int Value { get; set; }
    public string Type { get; set; }
}

public class Person
{
    public string Id { get; set; }
    public string Name { get; set; }
    public Dictionary<string, Bike> Bikes { get; set; }
}

Person.Bikes应该更改为Dictionary<string, Bike>(也不需要Bike.Id属性),因为Bikes json元素不是数组而是对象。

相关问题