2009-09-24 22 views
76

Microsoft fornisce a qualsiasi libreria funzioni con JSON in C#? In caso contrario, quale libreria open source mi consigliate?Libreria JSON per C#

+1

Intendi consumare, creare o entrambi? –

+1

Entrambi consumano e creano. Grazie – weilin8

risposta

77
+5

Qual è il vantaggio dell'utilizzo di JSON.NET su System.Web.Script.Serialization.JavaScriptSerializer? – weilin8

+3

ti permette di usare come proprietà di classe, invece di serializzare solo stringhe, per esempio ... c'è molto di più .. – balexandre

+7

Non usare JavaScriptSerializer circa 40x più lento della maggior parte degli altri serializzatori JSON che ho messo a confronto. – mythz

3

Dai un'occhiata alla namespace system.web.script.serialization (credo avrete bisogno di .Net 3.5)

7

Se guardate qui, vedrete diverse librerie diverse per JSON su C#.

http://json.org/

Troverete una versione per LINQ così come alcuni altri. Ci sono circa 7 librerie per C# e JSON.

quadro
14

.NET supporta JSON attraverso JavaScriptSerializer. Ecco un buon esempio per iniziare.

using System.Collections.Generic; 
using System.Web.Script.Serialization; 

namespace GoogleTranslator.GoogleJSON 
{ 
    public class FooTest 
    { 
     public void Test() 
     { 
      const string json = @"{ 
       ""DisplayFieldName"" : ""ObjectName"", 
       ""FieldAliases"" : { 
       ""ObjectName"" : ""ObjectName"", 
       ""ObjectType"" : ""ObjectType"" 
       }, 
       ""PositionType"" : ""Point"", 
       ""Reference"" : { 
       ""Id"" : 1111 
       }, 
       ""Objects"" : [ 
       { 
        ""Attributes"" : { 
        ""ObjectName"" : ""test name"", 
        ""ObjectType"" : ""test type"" 
        }, 
        ""Position"" : 
        { 
        ""X"" : 5, 
        ""Y"" : 7 
        } 
       } 
       ] 
      }"; 

      var ser = new JavaScriptSerializer(); 
      ser.Deserialize<Foo>(json); 
     } 
    } 

    public class Foo 
    { 
     public Foo() { Objects = new List<SubObject>(); } 
     public string DisplayFieldName { get; set; } 
     public NameTypePair FieldAliases { get; set; } 
     public PositionType PositionType { get; set; } 
     public Ref Reference { get; set; } 
     public List<SubObject> Objects { get; set; } 
    } 

    public class NameTypePair 
    { 
     public string ObjectName { get; set; } 
     public string ObjectType { get; set; } 
    } 

    public enum PositionType { None, Point } 
    public class Ref 
    { 
     public int Id { get; set; } 
    } 

    public class SubObject 
    { 
     public NameTypePair Attributes { get; set; } 
     public Position Position { get; set; } 
    } 

    public class Position 
    { 
     public int X { get; set; } 
     public int Y { get; set; } 
    } 
} 
+1

questo è un buon codice, come potrei una delle classi per ottenere i risultati? Ad esempio ObjectName per l'output in una casella di testo con il 'nome del test' dei risultati? Ho provato 'test = GoogleTranslator.GoogleJSON.NameTypePair.ObjectName' messagebox.show (test) – Ebikeneser

0

Prova il progetto Vici, Vici Parser. Include un parser/tokeniser JSON. Funziona alla grande, lo usiamo insieme al framework MVC.

Maggiori informazioni su: http://viciproject.com/wiki/projects/parser/home

ho dimenticato di dire che è open source, in modo da poter sempre dare un'occhiata al codice, se volete.

19

Si dovrebbe anche provare la mia ServiceStack JsonSerializer - è il più veloce serializzatore NET JSON al momento based on the benchmarks of the leading JSON serializers e supporta la serializzazione di qualsiasi tipo, POCO DataContracts, Elenchi/Dizionari, interfacce, ereditarietà, oggetti tardiva tra i tipi anonimi, ecc

esempio di base

var customer = new Customer { Name="Joe Bloggs", Age=31 }; 
var json = customer.ToJson(); 
var fromJson = json.FromJson<Customer>(); 

Nota: utilizzare solo Microsofts JavaScriptSerializer se le prestazioni non è importante per voi come ho dovuto lasciare fuori dei miei punti di riferimento dal momento che il suo fino a 40x-100x più lento di th e altri serializzatori JSON.