Десериализация Json с помощью динамического ключа C#

#c# #json #serialization

#c# #json #сериализация

Вопрос:

Я борюсь с Json, предоставляемым внешним участником :

 {
  "info": {
    "compa": "123"
  },
  "employees": {
    "key1": {
      "name": "dog",
      "friend": [ "cat" ]

    },
    "key2": {
      "name": "fish",
      "friend": [ "shark" ]
    }
  }
}
 

Я использую классы:

 public class company
{
    public info info { get; set; }

    public employees employees { get; set; }
}

public class info
{
    public string compa { get; set; }
}

public class employees
{
    public List<Dictionary<string, employee>> employee { get; set; }
}

public class employee
{
    public string name { get; set; }

    public string friend { get; set; }
}
 

Когда я десериализую, мое свойство employee пусто в классе employees .

Любая помощь была бы очень признательна!

Ответ №1:

Есть несколько проблем с вашей схемой C #. Вы можете избавиться от employees класса и заменить его на a Dictionary<string, employee> . Обратите внимание, что это словарь, а не список словарей. Также обратите внимание, что employee.friend это коллекция, а не строка.

Это работает:

 class Program
{
    static async Task Main(string[] args)
    {
        string json = await File.ReadAllTextAsync("json1.json");
        var company = JsonSerializer.Deserialize<company>(json);
    }
}

public class company
{
    public info info { get; set; }
    public Dictionary<string, employee> employees { get; set; }
}

public class info
{
    public string compa { get; set; }
}

public class employee
{
    public string name { get; set; }
    public IEnumerable<string> friend { get; set; }
}