TransWikia.com

JsonConvert.DeserializeObject não está lendo o valor do meu json. (Valores retornando como null)

Stack Overflow em Português Asked by Renan Souza on February 17, 2021

Estou tentando fazer a leitura de um simples arquivo em json que vai possuir o caminho para alguns arquivos de audio. Nada complicado. Segue abaixo o json:

{
  "audioSetup": {
    "buttonNumpad1AudioFile": "C:\Users\mypc\Downloads\Musica 1.mp3",
    "buttonNumpad2AudioFile": "C:\Users\mypc\Downloads\Musica 2.mp3",
    "buttonNumpad3AudioFile": "C:\Users\mypc\Downloads\Musica 3.mp3",
  }
}

Estou usando o seguinte codigo para realizar a leitura do arquivo json:

public static class Json
    {
        public static AudioSetup LoadAudioSetup()
        {
            using (StreamReader streamReader = File.OpenText(@"....audioSetup.json"))
            {
                string json = streamReader.ReadToEnd();
                AudioSetup audioSetup = JsonConvert.DeserializeObject<AudioSetup>(json);
                return audioSetup;
            }
        }
    }

Além disso eu criei uma classe para usar o DeserializeObject:

public class AudioSetup    {
        public string buttonNumpad1AudioFile { get; set; }
        public string buttonNumpad2AudioFile { get; set; }
        public string buttonNumpad3AudioFile { get; set; }
    }

Os dados lidos pelo StreamReader estão todos certos. O problema está dentro da instancia que ele cria depois do JsonConvert.DeserializeObject(json) vem com as propriedades com valor null.
Ja tentei varias formas de fazer isso e todas resultam nas propriedades com valor null.

Simplesmente não consigo ler os valores dentro de audioSetup.buttonbuttonNumpad1AudioFile ou as outras duas propriedades por eles estarem sempre null depois do processo de deserialização.

Podem me dar uma ajuda com isso?

One Answer

Seu JSON é um objeto que tem um membro que é um objeto com outros 3 membros, então você tem duas opções, mude seu JSON para

{
    "buttonNumpad1AudioFile": "C:\Users\mypc\Downloads\Musica 1.mp3",
    "buttonNumpad2AudioFile": "C:\Users\mypc\Downloads\Musica 2.mp3",
    "buttonNumpad3AudioFile": "C:\Users\mypc\Downloads\Musica 3.mp3",
}

ou crie duas classes sendo que uma tem uma propriedade do tipo da outra, por exemplo

public class AudioSetup    
{
        public string buttonNumpad1AudioFile { get; set; }
        public string buttonNumpad2AudioFile { get; set; }
        public string buttonNumpad3AudioFile { get; set; }
}

public class ContainerAudioSetup
{
         AudioSetup    audioSetup    {get; set;}
}

Correct answer by Vitor Luiz Rubio on February 17, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP