C # JsonConvert - Как проанализировать неправильный ключ/значение JSON?

Я пытаюсь получить json с JsonConvert из файла, который содержит следующую информацию:

 {
  "Programacion": {
    "F201604260700": { "Comercial": "COM63039" },
    "F201604260805": { "Comercial": "COM63039" },
    "F201604260944": { "Comercial": "COM63039" },
    "F201604261113": { "Comercial": "COM63039" }
    }
 }

Чтобы иметь возможность хранить json, я создал класс под названием Tandas, потому что каждое «Программирование» имеет другой ключ («F201604260700», «F201604260805»). Мне не удалось создать массив данных, который работает для меня.

public class Tandas
        {
            // Not work
            //public IEnumerable<IDictionary<string, string>> Programacion { get; set; }

            // Not work
            public List<KeyValuePair<string, KeyValuePair<string, string>>> Programacion { get; set; }
        }

Я не очень разбираюсь в исправлениях и объектах в C#, какое решение я мог бы дать?

// Error
this.tandas = JsonConvert.DeserializeObject<Tandas>(json_tandas_string);

person Angel    schedule 12.03.2019    source источник
comment
Являются ли ключи в части { "Comercial": "COM63039" } неправильными или они имеют определенный формат?   -  person JLRishe    schedule 12.03.2019
comment
Возможный дубликат десериализации словаря JSON.   -  person Dour High Arch    schedule 12.03.2019
comment
Здравствуйте, JLRisge, {Коммерческий: } – это обычный ключ.   -  person Angel    schedule 12.03.2019
comment
разве это не должен быть массив?   -  person T McKeown    schedule 12.03.2019


Ответы (1)


JsonConvert может десериализовать объект JSON в Dictionary<string, T>, где T — это тип значений.

В этом случае значения также являются объектами JSON со строковыми значениями, поэтому T в этом случае будет Dictionary<string, string>.

Полный класс:

public class Tandas
{
    public Dictionary<string, Dictionary<string, string>> Programacion { get; set; }
}

Теперь вы выяснили, что внутренние объекты содержат обычные ключи, поэтому вы можете определить для них класс:

public class InnerThing
{
    public string Comercial { get; set; }
}

public class Tandas
{
    public Dictionary<string, InnerThing> Programacion { get; set; }
}
person JLRishe    schedule 12.03.2019
comment
Удивительно! Это работает, и результат можно повторить с помощью foreach, большое спасибо! - person Angel; 12.03.2019