2010-07-18 25 views
56

.NET 4 có đi kèm với bất kỳ lớp nào tuần tự hóa/deserializes dữ liệu JSON không?.NET 4 có trình serializer/deserializer JSON tích hợp không?

  • Tôi biết có thư viện bên thứ ba, chẳng hạn như JSON.NET, nhưng tôi đang tìm kiếm thứ gì đó được tích hợp ngay vào .NET.

  • Tôi đã tìm thấy Data Contracts trên MSDN, nhưng đối với WCF, không dành cho Winforms hoặc WPF.

+4

JSON.Net cũng được hỗ trợ và có vẻ như Microsoft có ý định tự mình áp dụng nó * "Chúng tôi trong nhóm web sẽ bao gồm JSON.NET làm JSON serializer mặc định trong API Web khi nó phát hành, vì vậy sẽ tốt đẹp." * từ http://www.hanselman.com/blog/ OnTheNightmareThatIsJSONDatesPlusJSONNETAndASPNETWebAPI.aspx – Liam

+0

Chỉ cần lưu ý thư viện nhúng cho hiệu suất ** của serialon JSon ** trong .Net! – Babak

+1

@Babak bạn có ý nghĩa gì về sự cẩn thận? Xin hãy giải thích. –

Trả lời

37

Bạn có thể sử dụng lớp DataContractJsonSerializer ở bất cứ nơi nào bạn muốn, đó chỉ là lớp .net và không giới hạn ở WCF. Thông tin thêm về cách sử dụng nó herehere.

+0

Cảm ơn, MSDN đã nói lớp DataContractJsonSerializer trong Assembly: System.Runtime.Serialization (trong System.Runtime.Serialization.dll). Tuy nhiên, VS2010 hiển thị lỗi, không thể tìm thấy DataContractJsonSerializer. – Cheung

+0

@TatMing Đó là bởi vì, IIRC, trước .Net V4 nó nằm trong System.ServiceModel.Web – Psytronic

+0

Tìm thấy rằng ~ Nó về vấn đề khung mục tiêu, xem: http://stackoverflow.com/questions/1825417/where-is-system -servicemodel-web-dll – Cheung

27

Có lớp JavaScriptSerializer (mặc dù bạn sẽ cần phải tham khảo lắp ráp System.Web.Extensions lớp làm việc hoàn toàn tốt đẹp trong WinForms/ứng dụng WPF). Thậm chí nếu lớp DataContractJsonSerializer được thiết kế cho WCF, nó vẫn hoạt động tốt trong các ứng dụng khách.

+5

FYI: So sánh giữa JsonSerializer và JavaScriptSerializer có thể được tìm thấy [http://stackoverflow.com/questions/9301878/whats-the-difference-between-datacontractjsonserializer-and-javascriptserialize](here). – LosManos

+0

Ngoài ra, JavaScriptSerializer được chôn trong không gian tên System.Web.Script.Serialization.JavaScriptSerializer cho những người tìm kiếm nó. – Brain2000

0

Sử dụng lớp chung này để tuần tự hóa/deserialize JSON. Bạn dễ dàng có thể serialize cấu trúc dữ liệu phức tạp như thế này:

Dictionary<string, Tuple<int, int[], bool, string>> 

để JSON chuỗi và sau đó lưu nó trong bối cảnh ứng dụng hoặc khác

public class JsonSerializer 
{ 
    public string Serialize<T>(T aObject) where T : new() 
    { 
     T serializedObj = new T(); 
     MemoryStream ms = new MemoryStream(); 
     DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T)); 
     ser.WriteObject(ms, serializedObj); 
     byte[] json = ms.ToArray(); 
     ms.Close(); 
     return Encoding.UTF8.GetString(json, 0, json.Length); 
    } 

    public T Deserialize<T>(string aJSON) where T : new() 
    { 
     T deserializedObj = new T(); 
     MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(aJSON)); 
     DataContractJsonSerializer ser = new DataContractJsonSerializer(aJSON.GetType()); 
     deserializedObj = (T)ser.ReadObject(ms); 
     ms.Close(); 
     return deserializedObj; 
    } 
} 
Các vấn đề liên quan