Thư viện JSON cho C # [đã đóng]


76

Microsoft có cung cấp bất kỳ thư viện nào để làm việc với JSON trong C # không? Nếu không, bạn giới thiệu thư viện mã nguồn mở nào?


1
Ý bạn là tiêu thụ, tạo ra hay cả hai?
Dan Esparza 24/09/09

1
Vừa tiêu dùng vừa sáng tạo. Cảm ơn
weilin 8

Câu trả lời:


77

5
Lợi thế của việc sử dụng JSON.NET so với System.Web.Script.Serialization.JavaScriptSerializer là gì?
weilin 8

3
nó cho phép bạn sử dụng như là tài sản lớp, dây thay vì chỉ serialize, cho một ... có những cách nhiều hơn nữa ..
balexandre

7
Không sử dụng JavaScriptSerializer, nó chậm hơn khoảng 40 lần so với hầu hết các trình tuần tự JSON khác mà tôi đã đánh giá.
mythz

1
bản dựng JSON.NET mới nhất có một số vấn đề với .NET Framework 3.5. Có thể khôi phục bằng cách sử dụng cài đặt .NET Framework 3.5 SP1. Tuy nhiên, nếu bạn không thể thay đổi thành .NET Framework 3.5 SP1, đừng sử dụng JSON.NET
Rudy

1
Tôi đã thử JSON.NET một chút và họ gặp vấn đề khi nói đến tính đa hình, như tôi thấy. Để JSON.NET có thể deserialize một đối tượng kế thừa, JSON.NET yêu cầu phải có một thuộc tính tên là "$ type" có chứa tên kiểu, tuy nhiên, tôi nghĩ rằng nó yêu cầu tên loại FULL và điều đó không tốt khi bạn có JAVA / Android-thứ ở đầu bên kia.
Ted

19

Bạn cũng nên dùng thử ServiceStack JsonSerializer của tôi - đó là trình tuần tự .NET JSON nhanh nhất tại thời điểm hiện tại dựa trên điểm chuẩn của các trình tuần tự JSON hàng đầu và hỗ trợ tuần tự hóa mọi Loại POCO, DataContracts, Danh sách / Từ điển, Giao diện, Kế thừa, Các đối tượng bị ràng buộc muộn bao gồm cả ẩn danh các loại, v.v.

Ví dụ cơ bản

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

Lưu ý: Chỉ sử dụng Microsofts JavaScriptSerializer nếu hiệu suất không quan trọng đối với bạn vì tôi đã phải để nó ra khỏi điểm chuẩn của mình vì nó chậm hơn tới 40x-100x so với các trình tuần tự JSON khác.


14

Khung .net hỗ trợ JSON thông qua JavaScriptSerializer. Đây là một ví dụ điển hình để bạn bắt đầu.

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
đây là mã tốt, làm thế nào tôi có thể một trong các lớp để lấy lại kết quả? Ví dụ ObjectName để xuất ra một hộp văn bản với kết quả là 'tên thử nghiệm'? Tôi đã thử 'test = GoogleTranslator.GoogleJSON.NameTypePair.ObjectName' messagebox.show (thử nghiệm)
Ebikeneser

7

Nếu bạn nhìn vào đây, bạn sẽ thấy một số thư viện khác nhau cho JSON trên C #.

http://json.org/

Bạn sẽ tìm thấy một phiên bản cho LINQ cũng như một số phiên bản khác. Có khoảng 7 thư viện cho C # và JSON.



3

Hãy xem không gian tên system.web.script.serialization (tôi nghĩ bạn sẽ cần .Net 3.5)




0

Hãy thử Vici Project, Vici Parser. Nó bao gồm một trình phân tích cú pháp / tokeniser JSON. Nó hoạt động tuyệt vời, chúng tôi sử dụng nó cùng với khuôn khổ MVC.

Thông tin thêm tại: http://viciproject.com/wiki/projects/parser/home

Tôi quên nói rằng nó là mã nguồn mở nên bạn luôn có thể xem qua mã nếu muốn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.