Бібліотека JSON для C # [закрито]


76

Чи надає Microsoft будь-яку бібліотеку для роботи з JSON на C #? Якщо ні, яку бібліотеку з відкритим кодом ви рекомендуєте?


1
Ви маєте на увазі споживання, створення чи те й інше?
Dan Esparza

1
І споживаючи, і створюючи. Дякую
weilin8

Відповіді:


77

5
У чому перевага використання JSON.NET перед System.Web.Script.Serialization.JavaScriptSerializer?
weilin8

3
це дозволяє використовувати як властивість класу, замість цього просто серіалізувати рядки, для одного ... є ще більше ...
balexandre

7
Не використовуйте JavaScriptSerializer приблизно в 40 разів повільніше, ніж більшість інших серіалізаторів JSON, які я тестував.
mythz

1
Остання збірка JSON.NET має деякі проблеми з .NET Framework 3.5. Відновлюється за допомогою встановлення .NET Framework 3.5 SP1. Однак якщо ви не можете перейти на .NET Framework 3.5 SP1, не використовуйте JSON.NET
Руді,

1
Я трохи спробував JSON.NET, і, як я бачу, у них виникають проблеми, що стосується поліморфізму. Щоб JSON.NET міг десеріалізувати об'єкт, який успадковує, JSON.NET вимагає, щоб тип був властивістю "$ type", що містить ім'я типу, однак, я думаю, що воно вимагає ПОВНЕ ім'я типу, і це не найкраще речі, коли у вас є JAVA / Android-річ на іншому кінці.
Тед

19

Ви також повинні спробувати мій ServiceStack JsonSerializer - це найшвидший .NET JSON-серіалізатор на даний момент, заснований на орієнтирах провідних серіалізаторів JSON і підтримує серіалізацію будь-якого типу POCO, DataContracts, Списки / Словники, Інтерфейси, Спадщина, Об'єкти, що мають пізній зв’язок, включаючи анонімні типи тощо.

Основний приклад

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

Примітка: Використовуйте MicroSofts JavaScriptSerializer лише в тому випадку, якщо продуктивність для вас не важлива, оскільки мені довелося залишити її поза своїми тестами, оскільки вона до 40x-100x повільніша, ніж інші серіалізатори JSON.


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

7

Якщо ви заглянете сюди, ви побачите кілька різних бібліотек для JSON на C #.

http://json.org/

Ви знайдете версію для LINQ, а також деякі інші. Існує близько 7 бібліотек для C # та JSON.



3

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


2

Щоб дати більш сучасну відповідь на це запитання: так, .Net включає серіалізатор / десерліатор JSON, починаючи з версії 3.5, через простір імен System.Runtime.Serialization.Json: http://msdn.microsoft.com/en-us/library /system.runtime.serialization.json(v=vs.110).aspx

Але за словами творця JSON.Net, .Net Framework у порівнянні з його реалізацією з відкритим кодом є набагато повільнішим.



0

Спробуйте проект Vici, Vici Parser. Він включає синтаксичний аналізатор / маркер JSON. Це чудово працює, ми використовуємо його разом з MVC framework.

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

Я забув сказати, що це відкритий код, тому ви завжди можете поглянути на код, якщо хочете.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.