Atualmente estou com alguns problemas. Estou usando C # com Json.NET. O problema é que sempre consigo:
{"Caractere inesperado encontrado durante a análise do valor: e. Caminho '', linha 0, posição 0."}
Portanto, estou usando o Json.NET da seguinte maneira. Eu tenho uma aula que deve ser salva. A classe se parece com isto:
public class stats
{
public string time { get; set; }
public string value { get; set; }
}
public class ViewerStatsFormat
{
public List<stats> viewerstats { get; set; }
public String version { get; set; }
public ViewerStatsFormat(bool chk)
{
this.viewerstats = new List<stats>();
}
}
Um objeto desta classe será preenchido e salvo com:
File.WriteAllText(tmpfile, JsonConvert.SerializeObject(current), Encoding.UTF8);
A parte de salvamento funciona bem e o arquivo existe e é preenchido. Depois disso, o arquivo será lido de volta na classe com:
try
{
ViewerStatsFormat current = JsonConvert.DeserializeObject<ViewerStatsFormat>(tmpfile);
//otherstuff
}
catch(Exception ex)
{
//error loging stuff
}
Agora, na linha current = vem a exceção:
{"Caractere inesperado encontrado durante a análise do valor: e. Caminho '', linha 0, posição 0."}
Eu não sei por que isso vem. O arquivo json é o seguinte -> Clique aqui no link JSON
Alguém tem alguma idéia?
c#
json
visual-studio-2013
json.net
zAfLu
fonte
fonte
Respostas:
Possivelmente você não está passando JSON para
DeserializeObject
.Parece que a partir
File.WriteAllText(tmpfile,...
desse tipo detmpfile
éstring
que contêm caminho para um arquivo.JsonConvert.DeserializeObject
leva o valor JSON, não o caminho do arquivo - portanto, falha ao tentar converter algo como@"c:\temp\fooo"
- que claramente não é JSON.fonte
Resolvi o problema com estas ferramentas online:
O código simples:
fonte
check if the Json structure
está OK em C #?Eu experimentei o mesmo erro na minha solução Xamarin.Android.
Verifiquei se meu JSON estava correto e percebi que o erro só apareceu quando executei o aplicativo como uma versão Release.
Descobriu-se que o Linker estava removendo uma biblioteca do Newtonsoft.JSON, fazendo com que o JSON fosse analisado incorretamente.
Corrigi o erro adicionando Newtonsoft.Json à configuração Ignorar assemblies na configuração do Android Build (captura de tela abaixo)
Código de análise JSON
Captura de tela do Visual Studio Mac
Captura de tela do Visual Studio
fonte
Também encontrei este erro para uma ação da API da Web (.Net Core 3.0) que estava vinculando a um em
string
vez de umobject
ou aJObject
. O JSON estava correto, mas o fichário tentou obter uma string da estrutura JSON e falhou.Então, em vez de:
Tive que usar o mais específico:
fonte
No meu caso, o arquivo contendo string JSON tinha BOM . Depois de remover o BOM, o problema foi resolvido.
fonte
Esse problema está relacionado à marca de ordem de bytes no arquivo JSON. O arquivo JSON não é codificado como dados de codificação UTF8 quando salvo. Usando
File.ReadAllText(pathFile)
corrigir este problema.Quando estamos operando com dados Byte e convertendo-os em string e depois passando para JsonConvert.DeserializeObject, podemos usar a codificação UTF32 para obter a string.
byte[] docBytes = File.ReadAllBytes(filePath);
string jsonString = Encoding.UTF32.GetString(docBytes);
fonte
Tive o mesmo problema com o webapi no ASP.NET Core, no meu caso foi porque meu aplicativo precisa de autenticação, então ele atribui a anotação
[AllowAnonymous]
e funcionou.fonte
Suponha que este seja o seu json
se você quiser desserializar o local novamente, modifique o json como abaixo
em seguida, tente desserializar para a respectiva classe, tomando o valor do local
fonte
No meu cenário, recebi uma mensagem um pouco diferente, em que a linha e a posição não eram zero.
Esta foi a principal resposta do Google para a mensagem que citei.
Isso aconteceu porque eu tinha chamado um programa da linha de comando do Windows, passando JSON como parâmetro.
Quando revisei os argumentos em meu programa, todas as aspas duplas foram removidas. Você tem que reconstituí-los.
Postei uma solução aqui . Embora provavelmente pudesse ser aprimorado com um Regex.
fonte
Eu tive um erro semelhante e pensei em responder caso alguém estivesse tendo algo semelhante. Eu estava fazendo um loop em um diretório de arquivos json e desserializando-os, mas estava recebendo o mesmo erro.
O problema era que ele também estava tentando capturar arquivos ocultos. Certifique-se de que o arquivo que você está transmitindo seja um arquivo .json. Suponho que também lida com texto. Espero que isto ajude.
fonte
No meu caso, estava recebendo um erro em JsonConvert.PopulateObject () . Minha solicitação estava retornando JSON que estava envolto em um par extra de colchetes '[]', tornando meu resultado uma matriz de um objeto em vez de apenas um objeto. Aqui está o que eu fiz para entrar nesses colchetes (apenas para esse tipo de modelo):
fonte
Se você estiver usando o download de dados usando url ... pode ser necessário usar
fonte
Verifique se o modelo que você compartilhou entre o cliente e o servidor é o mesmo. às vezes você obtém este erro quando não atualiza a versão da Api e ela retorna um modelo atualizado, mas você ainda tem um antigo. Às vezes, você obtém o que serializa / desserializa não é um JSON válido.
fonte
Eu enfrentei uma mensagem de erro semelhante em formulários Xamarin ao enviar uma solicitação para webApi para obter um token,
fonte
Quando encontrei um problema semelhante, corrigi-lo substituindo
&mode=xml
por&mode=json
na solicitação.fonte