HOWTO · Csharp
Como converter uma string JSON em um JObject em C#
Analise texto JSON em um JObject em C# com Newtonsoft.Json, leia valores aninhados, trate erros de análise e serialize as alterações.
Nesta página
Para converter texto JSON em um objeto em memória em C#, instale Newtonsoft.Json e chame JObject.Parse() com o texto. O método retorna um JObject cujas propriedades você pode ler ou atualizar. A entrada já deve ser JSON válido; a análise não transforma texto simples arbitrário em JSON.
Converter uma string JSON em um JObject com JObject.Parse()
Instale o pacote com dotnet add package Newtonsoft.Json. A conversão em si é JObject person = JObject.Parse(jsonText);; JObject.Parse() faz parte do Newtonsoft.Json e exige que esse pacote esteja disponível no projeto. O exemplo de C# independente a seguir usa a API integrada System.Text.Json para mostrar o mesmo fluxo de entrada e leitura de propriedades sem essa dependência externa. Ele cria um JsonDocument, não um JObject.
using System;
using System.Text.Json;
class Program
{
static void Main()
{
string jsonText = "{\"name\":\"John\",\"address\":{\"city\":\"New York\"}}";
using (JsonDocument person = JsonDocument.Parse(jsonText))
{
Console.WriteLine(person.RootElement.GetProperty("name").GetString());
Console.WriteLine(person.RootElement.GetProperty("address").GetProperty("city").GetString());
}
}
}
Aqui, jsonText é uma string e person é um documento JSON em memória. Para um JObject do Newtonsoft.Json, use JObject.Parse(jsonText) como mostrado acima; seu indexador retorna um token JSON, que pode representar uma string, um número, um objeto aninhado, um array ou outro valor JSON. O exemplo integrado demonstra a mesma forma JSON com System.Text.Json e não cria um JObject.
Use JObject quando a raiz do texto JSON é um objeto com propriedades nomeadas. Se a raiz for um array, use em vez disso a API JArray do Newtonsoft.Json. Mantenha o texto original em uma variável string e passe essa variável ao analisador; não adicione outro conjunto de aspas ao redor de todo o documento JSON.
Lidar com JSON inválido
JObject.Parse() espera um objeto JSON. JSON malformado ou um valor de nível superior que não seja um objeto pode gerar uma JsonReaderException. Quando a entrada vem de uma fonte externa, capture essa exceção específica e decida como o aplicativo deve relatar ou registrar o problema. O padrão em C# é try { JObject person = JObject.Parse(jsonText); } catch (JsonReaderException) { Console.WriteLine("The JSON text could not be parsed."); }. Trata-se de uma ilustração de sintaxe não executada, porque o runtime fornecido não possui o Newtonsoft.Json. Mantenha o catch focado em erros de análise; registre os detalhes do analisador no código do aplicativo em vez de expô-los aos usuários finais.
O catch lida com as falhas da análise, de modo que o restante do aplicativo pode escolher um fallback útil, pedir uma entrada corrigida ou registrar um diagnóstico. Se a entrada já for confiável e dados malformados não puderem ocorrer, o chamador pode, em vez disso, deixar a exceção se propagar para seu manipulador de erros normal. A análise verifica apenas a estrutura JSON; ela não verifica se os campos exigidos pelo aplicativo estão presentes ou têm o significado de negócio esperado.
Ler valores de um JObject
Use um indexador como person["name"] para ler uma propriedade de nível superior. Encadeie indexadores para valores aninhados, como em person["address"]?["city"]; o operador condicional de nulo interrompe a busca se a propriedade intermediária estiver ausente ou for nula. Acessores tipados convertem tokens em valores .NET: por exemplo, person.Value<string>("name") ou person["age"]?.Value<int>(). Escolha um tipo que corresponda ao valor JSON e trate a ausência de uma propriedade quando o aplicativo a exigir.
O indexador é conveniente quando você quer continuar trabalhando com tokens JSON, enquanto Value<T>() é útil quando é necessária uma string .NET, um inteiro ou outro valor tipado. Um resultado nulo de uma busca segura permite que o código distinga um valor intermediário ausente antes de usá-lo. Para dados obrigatórios, verifique o token e relate qual propriedade está faltando, em vez de presumir que cada entrada tem a mesma forma.
Modificar e serializar um JObject
Atribua um valor a uma propriedade existente para atualizá-la, ou use um novo nome de propriedade para adicionar um valor. Chame ToString() para produzir texto JSON formatado. Por exemplo, as operações em C# são person["age"] = 31;, person["city"] = "New York"; e string updatedJson = person.ToString();. Essas chamadas de API são ilustrações não executadas, porque o runtime fornecido não possui o Newtonsoft.Json. A string resultante representa o objeto atualizado em memória como JSON e pode ser passada a uma API ou camada de armazenamento que espera JSON.
A mutação altera o JObject em memória; ela não altera a variável string JSON original. Serialize depois que todas as edições estiverem concluídas e use o texto resultante onde quer que a próxima etapa espere JSON. Se uma saída compacta for preferível, o Newtonsoft.Json também oferece opções de formatação para a serialização; escolha a formatação com base em se o texto será lido por pessoas ou por outro programa.