2009-09-24 13 views
76

Bietet Microsoft eine Bibliothek für die Arbeit mit JSON in C#? Wenn nicht, welche Open Source-Bibliothek empfehlen Sie?JSON-Bibliothek für C#

+1

Meinen Sie konsumieren, erstellen oder beides? –

+1

Sowohl verbrauchen und erstellen. Danke – weilin8

Antwort

77
+5

Was ist der Vorteil der Verwendung von JSON.NET gegenüber System.Web.Script.Serialization.JavaScriptSerializer? – weilin8

+3

erlaubt es Ihnen, als Klasseneigenschaft zu verwenden, sondern nur Strings serialisieren, für einen ... gibt es viel mehr .. – balexandre

+7

Verwenden Sie JavaScriptSerializer nicht etwa 40x langsamer als die meisten anderen JSON-Serialisierer, die ich getestet habe. – mythz

3

Werfen Sie einen Blick auf die System.Web.Script.Serialization Namespace (ich glaube, Sie .NET 3.5 benötigt)

7

Wenn Sie hier betrachten, werden Sie verschiedene Bibliotheken für JSON auf sehen C#.

http://json.org/

Sie eine Version für LINQ sowie einige andere. Es gibt ungefähr 7 Bibliotheken für C# und JSON.

14

Das FRAMEWORK unterstützt JSON durch JavaScriptSerializer. Hier ist ein gutes Beispiel für den Einstieg.

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

das ist guter Code, wie könnte ich eine der Klassen, um die Ergebnisse zurück zu bekommen? Zum Beispiel ObjectName, um in ein Textfeld mit dem Ergebnis 'Testname' auszugeben? Ich habe versucht 'test = GoogleTranslator.GoogleJSON.NameTypePair.ObjectName' messagebox.show (test) – Ebikeneser

0

Versuchen Sie das Vici-Projekt, Vici Parser. Es enthält einen JSON-Parser/Tokeniser. Es funktioniert großartig, wir verwenden es zusammen mit dem MVC-Framework.

Mehr Infos unter: http://viciproject.com/wiki/projects/parser/home

Ich habe vergessen zu sagen, dass es Open Source ist, so dass Sie immer einen Blick auf den Code nehmen können, wenn Sie mögen.

19

Sie sollen auch meinen ServiceStack versuchen JsonSerializer - es ist die schnellste .NET JSON Serializer zur Zeit based on the benchmarks of the leading JSON serializers und unterstützt die Serialisierung all POCO Typen, Datacontracts, Lists/Wörterbücher, Interfaces, Vererbung, Spät gebundenen Objekte, einschließlich anonyme Typen, usw.

Grund Beispiel

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

Hinweis: Nur Microsofts JavaScriptSerializer verwenden, wenn die Leistung für Sie nicht wichtig ist, wie ich es aus meiner Benchmarks seit seinem bis zu 40x-100x langsamer als th verlassen hätte Die anderen JSON-Serialisierer.

1

Ihre erste Frage zu beantworten, hat Microsoft ein DataContractJsonSerializer versenden: yes, .Net enthält JSON seriliazer/deserliazer seit Version 3.5 über das System: Msdn How to: Serialize and Deserialize JSON Data