Câu hỏi Thư viện JSON cho C # [đã đóng]


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 đề nghị thư viện nguồn mở nào?


76
2017-09-24 21:54


gốc


Bạn có nghĩa là tiêu thụ, tạo ra hoặc cả hai? - Dan Esparza
Cả hai tiêu thụ và tạo ra. Cảm ơn - weilin8


Các câu trả lời:


JSON.Net


77
2017-09-24 21:59



Lợi thế của việc sử dụng JSON.NET trên System.Web.Script.Serialization.JavaScriptSerializer là gì? - weilin8
nó cho phép bạn sử dụng làm thuộc tính lớp, thay vào đó chỉ cần tuần tự hóa chuỗi, cho một ... có nhiều cách hơn .. - balexandre
Không sử dụng JavaScriptSerializer khoảng 40x chậm hơn so với hầu hết các trình nối tiếp JSON khác mà tôi đã đánh giá. - mythz
bản dựng JSON.NET mới nhất có một số vấn đề với .NET Framework 3.5. Có thể phục hồi 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, không sử dụng JSON.NET - Rudy
Tôi đã thử JSON.NET tại bit, và họ có một vấn đề khi nói đến đa hình, như tôi thấy nó. Đối với JSON.NET để có thể deserialize một đối tượng thừa kế, JSON.NET yêu cầu phải gõ một thuộc tính có tên là "$ type" có chứa tên kiểu, tuy nhiên, tôi nghĩ nó yêu cầu tên kiểu FULL, và đó không phải là tốt khi bạn có một thứ JAVA / Android ở đầu bên kia. - Ted


Bạn cũng nên thử ServiceStack của tôi JsonSerializer - đó là trình serializer .NET JSON nhanh nhất hiện tại dựa trên các điểm chuẩn của các trình tuần tự hóa JSON hàng đầu và hỗ trợ tuần tự hóa bất kỳ loại POCO, DataContracts, danh sách / từ điển, giao diện, thừa kế, đối tượng bị ràng buộc trễ bao gồm các loại ẩn danh, 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 loại bỏ nó khỏi các điểm chuẩn của mình kể từ khi 40x-100x chậm hơn các trình tuần tự JSON khác.


19
2017-08-18 02:49





Khuôn khổ .net hỗ trợ JSON thông qua JavaScriptSerializer. Đây là một ví dụ tốt để giúp 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; }
    }
}

14
2017-09-24 22:02



đây là mã tốt, làm cách nào để tôi có thể 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ả 'tên thử nghiệm'? Tôi đã thử 'test = GoogleTranslator.GoogleJSON.NameTypePair.ObjectName' messagebox.show (kiểm tra) - Ebikeneser


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.


7
2017-09-24 21:58





Đây có phải là những gì bạn đang tìm kiếm không?

System.Web.Script.Serialization.JavaScriptSerializer 


5
2017-09-24 21:57





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


3
2017-09-24 21:58





Để cung cấp câu trả lời cập nhật hơn cho câu hỏi này: có, .Net bao gồm JSON seriliazer / deserliazer kể từ phiên bản 3.5 thông qua System.Runtime.Serialization.Json Namespace: http://msdn.microsoft.com/en-us/library/system.runtime.serialization.json(v=vs.110).aspx

Nhưng theo tác giả của JSON.Net, Net Framework so với việc triển khai mã nguồn mở của anh ta là chậm hơn rất nhiều.


2
2017-12-13 04:05