Afzaal Ahmad Zeeshan
Вы можете прочитать мою статью, чтобы понять, как работать с данными JSON в C#, От нуля до героя в JSON с C#[^]. Он дает вам обзор данных JSON, библиотеку Newtonsoft для обработки JSON и кучу других советов. Теперь, что касается вопроса и этих данных JSON, прочитайте остальную часть ответа.
Вы можете создать Dictionary<int, Type>
и храните значения в этой коллекции. Причина в том, что в C# 0 и 1 не могут использоваться в качестве имен для свойств. Вам нужно будет создать класс, который будет ловить объекты в Dictionary
Это дало бы вам начало:
public class MyData {
public string Name { get; set; }
public string Version { get; set; }
public string ChangeLog { get; set; }
public string Hash { get; set; }
}
Теперь ваш держатель объекта JSON станет:
public class JsonObjectHolder {
public string Updates { get; set; }
public Dictionary<int, MyData> { get; set; }
}
Теперь вы можете десериализовать JSON в объекты с помощью Json.NET:
var jsonObjectHolder = JsonConvert.DeserializeObject<JsonObjectHolder>(yourData);
Было бы хорошо сохранить имена согласованными, чтобы библиотека могла вам помочь. Но если вы не можете управлять данными из API или именованием объектов JSON, то вы можете использовать этот подход для десериализации значений.
Это допустимый JSON, потому что JavaScript практически ничего не навязывает в соглашениях об именах. В JavaScript следующие два оператора являются допустимыми:
var firstObject = jsonObjectHandler.prop;
var firstObject = jsonObjectHandler['prop'];
Таким образом, ваш код действителен в области JavaScript, и вы можете получить доступ к значениям следующим образом:
var firstObject = jsonObjectHandler['0'];
Однако в C# вы не можете сделать это для свойств, и вам нужно использовать
Dictionary
.
Lupu5R3x
Привет Afzaal
Я получил сообщение об ошибке с помощью этого: JsonObjectHolder открытый класс {
публичные обновления строк { get; set; }
публичный словарь<int, mydata=""> { get; set; }
}
Но исправил это, добавив имя в словарь prop, public Dictionary<int, mydata=""> Dict { get; set; }
Но я не могу войти в контакт со словарем, я пытался:
var jsonTest = JsonConvert.DeserializeObject<jsonobjectholder>(serverResponseJsonString.Результат);
Приставка.WriteLine(jsonTest.UpdatePack);
Приставка.WriteLine(jsonTest.Dict.Рассчитывать);
foreach (KeyValuePair<int, updateslist=""> item in jsonTest.Dict)
{
Приставка.WriteLine(item.Key);
}
Но я получаю необработанное исключение: System.NullReferenceException: ссылка на объект не установлена на экземпляр object. at " Console.WriteLine(jsonTest.Dict.Count);", и я комментирую это и пробую свой цикл foreach, я получаю ту же ошибку.
Что я делаю не так?
/LR
Lupu5R3x
Ответ афзаала указал мне правильное направление, хотя для этого нужно было еще немного поработать, но если бы я вставил неправильный Json, я думаю, что Афзаал бросил бы правильный ответ, поэтому я принимаю его решение.
Я добавил код, который работает ниже.