2009-04-22 12 views

risposta

7

Json.NET è una grande libreria .NET json. Suports LINQ, lettura/scrittura e conversione di oggetti da e verso JSON.

+2

ho guardato. Sembra troppo impresa per rispetto a System.Json. Sto principalmente cercando di usare Json per serializzare e deserializzare liste di strutture dati implicite (tuple, ecc.). Sto già lavorando per lo più su dati dinamici, quindi la sua capacità di serializzare oggetti fortemente tipizzati non è esattamente qualcosa di cui sono entusiasta, e il suo altro metodo è eccessivamente prolisso. – Patrick

+2

Effettua dati dinamici proprio come System.Json e serializza/deserializza: JObject o = JObject.Parse ("{'first_name': 'Jeff', 'age': 30}"); Console.WriteLine (o ["first_name"]); –

+0

Questo è meglio. Mi sono piaciuti molto gli operatori impliciti della classe JsonValue. Potrei semplicemente dargli un colpo. – Patrick

0

Se siete solo in cerca di JSON codifica/decodifica, v'è una libreria ufficiale estensione System.Web da Microsoft che lo fa, le probabilità sono probabilmente avete già questa assemblea (System.Web.Extensions):

http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx

esempio:

using System; 
using System.Web.Script.Serialization; 

class App 
{ 
    static void Main(string[] args = null) 
    { 
     JavaScriptSerializer jss = new JavaScriptSerializer(); 
     String sJson = "{\"Name\": \"Your name\"}"; 
     DesJson json = jss.Deserialize<DesJson>(sJson); 

     Console.WriteLine(json.Name); 
    } 
} 

class DesJson { 
    public string Name {get; set;} 
} 
0

Ecco un metodo extenstion di serializzare qualsiasi istanza di oggetto di JSON:

public static class GenericExtensions 
{ 
    public static string ToJsonString<T>(this T input) 
    { 
     string json; 
     DataContractJsonSerializer ser = new DataContractJsonSerializer(input.GetType()); 
     using (MemoryStream ms = new MemoryStream()) 
     { 
      ser.WriteObject(ms, input); 
      json = Encoding.Default.GetString(ms.ToArray()); 
     } 
     return json; 
    } 
} 

È necessario aggiungere un riferimento a System.ServiceModel.Web per utilizzare DataContractSerializer.

16

System.Json è ora disponibile in progetti non Silverlight tramite NuGet (sistema di gestione dei pacchetti di Net) ed è, auspicabilmente, sta per essere rilasciato come parte della struttura di base in vNext. Il pacchetto NuGet è denominato JsonValue.

Immaginiamo che abbiamo la seguente JSON nella variabile stringa json:

[{"a":"foo","b":"bar"},{"a":"another foo","b":"another bar"}] 

Possiamo ottenere scrivere il valore "un altro bar" per la console utilizzando il seguente codice:

using System.Json; 
dynamic jsonObj = JsonValue.Parse(json); 
var node = jsonObj[1].b; 
System.Console.WriteLine(node.Value); 
+0

Il pacchetto 'System.Json' è stato interrotto. Puoi trovare le classi appropriate nel framework stesso. –

+0

Il proprietario non ha elencato questo pacchetto :( – Tito

+0

@PatrickHofman: che versione intendi? L'ultima versione quasi stabile era https://www.nuget.org/packages/System.Json ma ora lo hanno anche deprecato. – Sebastian

Problemi correlati