HOWTO · Csharp

Come convertire una stringa JSON in un JObject in C#

Analizza il testo JSON in un JObject in C# con Newtonsoft.Json, leggi i valori nidificati, gestisci gli errori di parsing e serializza le modifiche.

In questa pagina

Per convertire il testo JSON in un oggetto in memoria in C#, installa Newtonsoft.Json e chiama JObject.Parse() con il testo. Il metodo restituisce un JObject le cui proprietà puoi leggere o aggiornare. L’input deve già essere JSON valido; il parsing non trasforma testo semplice arbitrario in JSON.

Convertire una stringa JSON in un JObject con JObject.Parse()

Installa il pacchetto con dotnet add package Newtonsoft.Json. La conversione vera e propria è JObject person = JObject.Parse(jsonText);; JObject.Parse() fa parte di Newtonsoft.Json e richiede che quel pacchetto sia disponibile nel progetto. L’esempio C# autonomo seguente usa l’API integrata System.Text.Json per mostrare lo stesso flusso di input e lettura delle proprietà senza quella dipendenza esterna. Crea un JsonDocument, non un 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());
        }
    }
}

Qui, jsonText è una stringa e person è un documento JSON in memoria. Per un JObject di Newtonsoft.Json, usa JObject.Parse(jsonText) come mostrato sopra; il suo indicizzatore restituisce un token JSON, che può rappresentare una stringa, un numero, un oggetto nidificato, un array o un altro valore JSON. L’esempio integrato dimostra la stessa forma JSON con System.Text.Json e non crea un JObject.

Usa JObject quando la radice del testo JSON è un oggetto con proprietà denominate. Se la radice è un array, usa invece l’API JArray di Newtonsoft.Json. Mantieni il testo originale in una variabile stringa, quindi passa quella variabile al parser; non aggiungere un altro set di virgolette intorno all’intero documento JSON.

Gestire JSON non valido

JObject.Parse() prevede un oggetto JSON. JSON malformato o un valore di primo livello diverso da un oggetto può generare una JsonReaderException. Quando l’input proviene da una fonte esterna, intercetta quell’eccezione specifica e decidi come l’applicazione deve segnalare o registrare il problema. Il pattern C# è try { JObject person = JObject.Parse(jsonText); } catch (JsonReaderException) { Console.WriteLine("The JSON text could not be parsed."); }. Si tratta di un’illustrazione di sintassi non eseguita, perché l’ambiente di runtime fornito non dispone di Newtonsoft.Json. Mantieni il catch concentrato sugli errori di parsing; registra i dettagli del parser nel codice dell’applicazione invece di esporli agli utenti finali.

Il catch gestisce gli errori del parsing, in modo che il resto dell’applicazione possa scegliere un fallback utile, chiedere un input corretto o registrare una diagnostica. Se l’input è già affidabile e non possono verificarsi dati malformati, il chiamante può invece lasciare che l’eccezione si propaghi al suo normale gestore di errori. Il parsing controlla solo la struttura JSON; non verifica che i campi richiesti dall’applicazione siano presenti o abbiano il significato di business atteso.

Leggere i valori da un JObject

Usa un indicizzatore come person["name"] per leggere una proprietà di primo livello. Concatena gli indicizzatori per i valori nidificati, come in person["address"]?["city"]; l’operatore condizionale di null interrompe la ricerca se la proprietà intermedia è assente o null. Gli accessori tipizzati convertono i token in valori .NET: ad esempio, person.Value<string>("name") o person["age"]?.Value<int>(). Scegli un tipo che corrisponda al valore JSON e gestisci una proprietà mancante quando la tua applicazione la richiede.

L’indicizzatore è comodo quando vuoi continuare a lavorare con i token JSON, mentre Value<T>() è utile quando serve una stringa .NET, un intero o un altro valore tipizzato. Un risultato null da una ricerca sicura consente al tuo codice di distinguere un valore intermedio mancante prima di usarlo. Per i dati richiesti, controlla il token e segnala quale proprietà manca invece di presumere che ogni input abbia la stessa forma.

Modificare e serializzare un JObject

Assegna un valore a una proprietà esistente per aggiornarla, oppure usa un nuovo nome di proprietà per aggiungere un valore. Chiama ToString() per produrre testo JSON formattato. Ad esempio, le operazioni C# sono person["age"] = 31;, person["city"] = "New York"; e string updatedJson = person.ToString();. Queste chiamate API sono illustrazioni non eseguite, perché l’ambiente di runtime fornito non dispone di Newtonsoft.Json. La stringa risultante rappresenta l’oggetto aggiornato in memoria come JSON e può essere passata a un’API o a un livello di archiviazione che prevede JSON.

La mutazione cambia il JObject in memoria; non cambia la variabile stringa JSON originale. Serializza dopo aver completato tutte le modifiche e usa il testo risultante ovunque il passaggio successivo preveda JSON. Se è preferibile un output compatto, Newtonsoft.Json supporta anche opzioni di formattazione per la serializzazione; scegli la formattazione in base al fatto che il testo sarà letto da persone o da un altro programma.