2009-09-24 34 views
76

¿Microsoft proporciona alguna biblioteca para trabajar con JSON en C#? Si no, ¿qué biblioteca de código abierto recomiendas?Biblioteca JSON para C#

+1

¿Quiere decir consumir, crear o ambos? –

+1

Tanto consumir como crear. Gracias – weilin8

Respuesta

77
+5

¿Cuál es la ventaja de usar JSON.NET sobre System.Web.Script.Serialization.JavaScriptSerializer? – weilin8

+3

le permite usar como propiedad de clase, en lugar de serializar cadenas, para una ... hay mucho más ... – balexandre

+7

No use JavaScriptSerializer alrededor de 40 veces más lento que la mayoría de los demás serializadores JSON que he comparado. – mythz

3

Tenga una mirada en el espacio de nombres system.web.script.serialization (creo que necesite Net 3.5)

7

Si nos fijamos aquí, verá varias bibliotecas diferentes para JSON en DO#.

http://json.org/

Encontrará una versión para LINQ, así como algunos otros. Hay aproximadamente 7 bibliotecas para C# y JSON.

marco
14

el .NET soporta JSON a través de JavaScriptSerializer. Aquí hay un buen ejemplo para comenzar.

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

este es un buen código, ¿cómo podría una de las clases recuperar los resultados? Por ejemplo, ObjectName para dar salida a un cuadro de texto con los resultados 'test name'? He intentado 'test = GoogleTranslator.GoogleJSON.NameTypePair.ObjectName' messagebox.show (prueba) – Ebikeneser

0

Prueba el Proyecto Vici, Vici Analizador. Incluye un analizador/tokeniser JSON. Funciona muy bien, lo usamos junto con el marco MVC.

Más información en: http://viciproject.com/wiki/projects/parser/home

me olvidaba decir que es de código abierto por lo que siempre puede tomar un vistazo al código si lo desea.

19

También debe tratar mi ServiceStack JsonSerializer - es el más rápido serializador JSON .NET en el momento based on the benchmarks of the leading JSON serializers y soporta la serialización de cualquier tipo, POCO DataContracts, Listas/Diccionarios, interfaces, herencia, objetos enlazado en tiempo, incluyendo los tipos anónimos, etc.

Ejemplo básico

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

Nota: Sólo utilice Microsoft de JavaScriptSerializer si el rendimiento no es importante para usted ya que he tenido que dejar fuera de mis puntos de referencia desde su hasta 40x-100x más lento de lo º e otros serializadores JSON.