Member 13669173 Ответов: 2

Попытка десериализации файла json C#


Привет, ребята. Я первый раз спрашиваю здесь. Итак, у меня возникла ситуация, когда я пытался получить некоторую информацию из файла Json. Я хочу получить информацию, которая находится внутри публичного класса Valore и Resultados. Вот как выглядит мой код:
public class Valore
        public string fecha { get; set; }
    {
    public string hora { get; set; }
    public string pml { get; set; }
    public string pml_ene { get; set; }
    public string pml_per { get; set; }
    public string pml_cng { get; set; }
}

public class Resultado
{
    public string clv_nodo { get; set; }
    public List<valore> Valores { get; set; }
}

public class RootObject
{
    public string nombre { get; set; }
    public string proceso { get; set; }
    public string sistema { get; set; }
    public string area { get; set; }
    public List<resultado> Resultados { get; set; }
    public string status { get; set; }
}



class Program
{
    static void Main(string[] args)
    {
        RootObject PrecioMarginal;
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(@"Someplaceoninternet");
        using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
        using (Stream stream = response.GetResponseStream())
        using (StreamReader reader = new StreamReader(stream))
        {
            string json = reader.ReadToEnd();
            price = JsonConvert.DeserializeObject<rootobject>(json);
           
        }
        Console.WriteLine("El estatus del nodo es: " + Price.status);
        Console.ReadKey();
    }
}


Что я уже пробовал:

Не слишком много, мой первый раз, когда я делаю код с помощью C#

David_Wimbley

У вас случайно нет образца JSON, который вы пытаетесь десериализовать?

Graeme_Grant

Имея проблемы с размещением решений, поэтому опубликую ответ здесь...

Решения сейчас публикуются..

2 Ответов

Рейтинг:
2

Graeme_Grant

Этот вопрос здесь часто задают, поэтому я опубликовал статью, которая отвечает на ваши и другие вопросы: Работа с JSON в C# и VB[^]


Рейтинг:
2

OriginalGriff

Я могу настоятельно рекомендовать использовать Newtonsoft.JSON для десериализации:

/// <summary>
/// Load all known sheets
/// </summary>
/// <param name="path">
/// Full path to the JSON file containing the sheet data.
/// If not provided, the default will be used.</param>
/// <returns></returns>
public static List<AveryLabelSheet> Load(string path = null)
    {
    if (path == null) path = GetSensiblePathToSheetDataFile();
    if (!File.Exists(path)) throw new FileNotFoundException("Cannot locate the Sheet Data file:\n   \"" + path + "\"\nPlease check the path and try again.");
    try
        {
        all = JsonConvert.DeserializeObject<List<AveryLabelSheet>>(File.ReadAllText(path));
        }
    catch (Exception ex)
        {
        throw new FileLoadException("Unable to load Sheet Data.\nThe file \"" + path + "\" does not load correctly.", ex);
        }
    isLoaded = true;
    return new List<AveryLabelSheet>(all);
    }
Одна строка кода делает всю работу:
all = JsonConvert.DeserializeObject<List<AveryLabelSheet>>

Вам нужно будет установить Newtonsoft.JSON: вы можете добавить его в свой проект с помощью менеджера пакетов NuGet (Tools ... Менеджер Пакетов NuGet ... Консоль Диспетчера Пакетов):
PM> Install-Package Newtonsoft.Json

Кроме того, я впервые использую данные JSON с недавним prioject, и это удивительно легко с помощью Newtonsoft stuff: сериализуйте и десериализуйте целый список пользовательских классов в одной строке кода каждый! Единственная проблема, которую я обнаружил, заключалась в том, что он работает только в том случае, если соответствующие свойства класса имеют как публичный геттер, так и сеттер - изначально я использовал частные сеттеры, и данные по понятным причинам не удалось прочитать обратно.