2009-09-24 2 views
76

Предоставляет ли Microsoft любую библиотеку для работы с JSON в C#? Если нет, то какую библиотеку с открытым исходным кодом вы рекомендуете?Библиотека JSON для C#

+1

Вы имеете в виду потребление, создание или и то, и другое? –

+1

Оба потребляют и создают. Спасибо – weilin8

ответ

77
+5

В чем преимущество использования JSON.NET через System.Web.Script.Serialization.JavaScriptSerializer? – weilin8

+3

он позволяет вам использовать как свойство класса, а просто сериализовать строки, для одного ... есть еще путь .. – balexandre

+7

Не используйте JavaScriptSerializer примерно в 40 раз медленнее, чем большинство других сериализаторов JSON, которые я тестировал. – mythz

3

Посмотрите на пространство имен system.web.script.serialization (я думаю, что вы будете нуждаться в .Net 3.5)

7

Если вы посмотрите здесь, вы увидите несколько различных библиотек для JSON на C#.

http://json.org/

Вы найдете версию для LINQ, а также некоторые другие. Для C# и JSON существует около 7 библиотек.

рамки
14

В .NET поддерживает JSON через JavaScriptSerializer. Вот хороший пример, чтобы вы начали.

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

Это хороший код, как я могу один из классов вернуть результаты? Например, ObjectName для вывода в текстовое поле с тестовым именем результатов? Я попробовал 'test = GoogleTranslator.GoogleJSON.NameTypePair.ObjectName' messagebox.show (test) – Ebikeneser

0

Попробуйте проект Vici, Vici Parser. Он включает в себя парсер/токенизер JSON. Он отлично работает, мы используем его вместе с инфраструктурой MVC.

Больше информации на: http://viciproject.com/wiki/projects/parser/home

Я забыл сказать, что он является открытым исходным кодом, так что вы всегда можете посмотреть на код, если вам нравится.

19

Вы должны также попробовать свои ServiceStack JsonSerializer - это самый быстрый .NET JSON сериализатор в данный момент based on the benchmarks of the leading JSON serializers и поддерживает сериализацию любого ПОКО Тип, DataContracts, списки/Словари, интерфейсы, наследование, Поздний переплет объектов, включая анонимные типы и т.д.

Базовый пример

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

Примечание: используйте Microsofts JavaScriptSerializer только если производительность не важна для вас, как я должен был оставить его из моих тестов, так как его до 40x-100x медленнее, чем е другие JSON-сериализаторы.

2

Чтобы дать более актуальной ответ на этот вопрос: да, .Net включает JSON seriliazer/deserliazer начиная с версии 3.5 через систему .Runtime.Serialization.Json Пространство имён: http://msdn.microsoft.com/en-us/library/system.runtime.serialization.json(v=vs.110).aspx

Но, по словам создателя JSON.Net, .Net Framework по сравнению с его версией с открытым исходным кодом намного медленнее.

Смежные вопросы