2016-05-13 6 views
6

Sto lavorando su un sistema di punti per il mio bot di chat di contrazione in C#. Ho bisogno di salvare un elenco di utenti con la loro quantità di punti e ore in un file .txt locale come questo:C# Crea un oggetto .NET per serializzazione JSON e deserializzazione

  • utenti: ???
    • nome utente: ???
      • Nick: stringa
      • punti: int
      • ore: int
    • nome utente: ???
      • Nick: stringa
      • punti: int
      • ore: int
    • nome utente: ???
      • Nick: stringa
      • punti: int
      • ore: INT

Sto cercando di creare un oggetto .NET per serializzare in una stringa JSON e scrivo questo al mio file .txt ma sono bloccato qui.

Immagino che gli utenti debbano essere un array di qualche tipo ma cosa devo fare con il nome utente? Non credo che JSON supporti tipi personalizzati?

Grazie per il vostro tempo, X3ntr

+0

In generale, è modellare i dati e scrivere le vostre classi, quindi il formato JSON consegue che (si può anche prendere formattato correttamente JSON e creare classi che modello che i dati). – crashmstr

risposta

5

Per prima cosa dobbiamo creare un modello. Questo modello deve corrispondere alla struttura del JSON. Ci sono un paio di modi per creare questo modello.

Probabilmente il modo migliore e più sicuro è di scriverlo manualmente. Se stai usando vs2015 puoi anche copiare il json e incollarlo come classe.

Potete trovare questa opzione qui: enter image description here

Un'altra opzione è quella di utilizzare un sito web come http://json2csharp.com/ qui è possibile incollare il JSON e questo sarà anche generare classi per il vostro JSON. Tieni presente che questi generatori non sono accurati al 100%, quindi potresti dover cambiare alcune proprietà personalmente.

Ones abbiamo il modello possiamo usare un lib come JSON.net per deserializzare il nostro JSON. Sul sito è anche un po 'di documentazione extra su come utilizzare JSON.net

var userList = JsonConvert.DeserializeObject<List<UserModel>>(users); //Users being the json as text. 

Ricordate che se si perde una proprietà in questo si modella non sempre genera un errore. Quindi assicurati che tutte le proprietà siano serializzate correttamente.

La serializzazione è semplice come la deserializzazione.

string json = JsonConvert.SerializeObject(model); 
File.WriteAllText("C:\json.txt",json); 

Facoltativo è aggiungere una codifica quando si scrive il json.

File.WriteAllText("C:\json.txt",json,Encoding.UTF8); 
+0

Modifica -> incolla speciale è fantastico! Non lo sapevo. –

6

mi prendo un colpo a esso.

Primo up abbiamo bisogno di un modello per il nostro utente:

public class User 
{ 
    public Guid Id { get; set; } 
    public string Username { get; set; } 
    public string NickName { get; set; } 
    public int Points { get ;set; } 
    public int Hours { get; set; } 
} 

Poi, nel tuo metodo principale, o dovunque avete a che fare con gli utenti:

List<User> users = new List<User>(); 

notare che Ho aggiunto una proprietà Id. Anche se i tuoi nomi utente potrebbero essere davvero unici, è sempre buona norma avere un qualche tipo di proprietà il cui unico compito è quello di essere l'id. Questa proprietà non dovrebbe mai cambiare nel corso della vita dell'utente. Dove l'username potrebbe cambiare un giorno, l'Id rimarrà sempre lo stesso.

In ogni modo, ora di trasformare la lista in JSON:

string myJsonString = JsonConvert.SerializeObject(users, Formatting.Indented); 

Et voilà! Il tuo elenco di utenti è ora in ordine in una stringa Json. La riga di codice sopra riportata proviene da JSON.NET, puoi ottenerla come a Nuget package. La qualifica completa è Newtonsoft.Json.JsonConvert. Puoi quasi fidarti di JSON.NET per gestire praticamente qualsiasi cosa tu ci passi, specialmente per una semplice classe User come se stessi per lanciarti contro.

Spero che questo ti aiuti a iniziare.