JSON-Bibliothek für C # [geschlossen]

76

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

weilin8
quelle
1
Meinst du konsumieren, kreieren oder beides?
Dan Esparza
1
Konsumieren und kreieren. Danke
weilin8

Antworten:

77

JSON.Net

Amy
quelle
5
Was ist der Vorteil der Verwendung von JSON.NET gegenüber System.Web.Script.Serialization.JavaScriptSerializer?
Weilin8
3
Es ermöglicht Ihnen, als Klasseneigenschaft zu verwenden, statt nur Zeichenfolgen zu serialisieren, zum einen ... es gibt viel mehr ..
Balexandre
7
Verwenden Sie JavaScriptSerializer nicht, es ist ungefähr 40x langsamer als die meisten anderen JSON-Serialisierer, die ich bewertet habe.
Mythos
1
Der neueste JSON.NET-Build weist einige Probleme mit .NET Framework 3.5 auf. Mit install .NET Framework 3.5 SP1 wiederherstellbar. Wenn Sie jedoch nicht zu .NET Framework 3.5 SP1 wechseln können, verwenden Sie JSON.NET
Rudy
1
Ich habe JSON.NET ein bisschen ausprobiert und sie haben ein Problem, wenn es um Polymorphismus geht, wie ich es sehe. Damit JSON.NET ein geerbtes Objekt deserialisieren kann, muss für JSON.NET eine Eigenschaft mit dem Namen "$ type" vorhanden sein, die den Typnamen enthält. Ich denke jedoch, dass der vollständige Typname erforderlich ist, und das ist nicht gut Sachen, wenn du ein JAVA / Android-Ding am anderen Ende hast.
Ted
19

Sie sollten auch meinen ServiceStack JsonSerializer ausprobieren - er ist derzeit der schnellste .NET JSON-Serializer, der auf den Benchmarks der führenden JSON-Serializer basiert und die Serialisierung von POCO-Typen, Datenverträgen, Listen / Wörterbüchern, Schnittstellen, Vererbungen und spät gebundenen Objekten einschließlich anonymer Objekte unterstützt Typen usw.

Grundlegendes Beispiel

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

Hinweis: Verwenden Sie Microsoft JavaScriptSerializer nur, wenn die Leistung für Sie nicht wichtig ist, da ich sie aus meinen Benchmarks herausnehmen musste, da sie bis zu 40x-100x langsamer ist als die anderen JSON-Serializer.

Mythos
quelle
14

Das .net-Framework unterstützt JSON über JavaScriptSerializer. Hier ist ein gutes Beispiel, um Ihnen den Einstieg zu erleichtern.

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; }
    }
}
Ty.
quelle
1
Das ist guter Code. Wie könnte ich eine der Klassen, um die Ergebnisse zurückzubekommen? Zum Beispiel ObjectName, der in ein Textfeld mit den Ergebnissen 'Testname' ausgegeben werden soll? Ich habe versucht 'test = GoogleTranslator.GoogleJSON.NameTypePair.ObjectName' messagebox.show (test)
Ebikeneser
7

Wenn Sie hier suchen, sehen Sie mehrere verschiedene Bibliotheken für JSON auf C #.

http://json.org/

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

James Black
quelle
3

Schauen Sie sich den Namespace system.web.script.serialization an (ich denke, Sie benötigen .Net 3.5).

Hannoun Yassir
quelle
0

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

Weitere Informationen unter: http://viciproject.com/wiki/projects/parser/home

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

Björn Bailleul
quelle