2012-06-10 23 views

Trả lời

38

Như thế này:

using System.IO; 
using System.Runtime.Serialization.Json; 
using System.Text; 

public static T Deserialize<T>(string json) 
{ 
    var _Bytes = Encoding.Unicode.GetBytes(json); 
    using (MemoryStream _Stream = new MemoryStream(_Bytes)) 
    { 
     var _Serializer = new DataContractJsonSerializer(typeof(T)); 
     return (T)_Serializer.ReadObject(_Stream); 
    } 
} 

public static string Serialize(object instance) 
{ 
    using (MemoryStream _Stream = new MemoryStream()) 
    { 
     var _Serializer = new DataContractJsonSerializer(instance.GetType()); 
     _Serializer.WriteObject(_Stream, instance); 
     _Stream.Position = 0; 
     using (StreamReader _Reader = new StreamReader(_Stream)) 
     { return _Reader.ReadToEnd(); } 
    } 
} 
+1

DataContractJsonSerializer yêu cầu các lớp và thành viên được đánh dấu bằng DataContract và DataMember. Json.net thì không. Trước đây là an toàn hơn vì không phải tất cả các lớp học có thể được xây dựng lại hoàn toàn từ tài sản của họ một mình. Sau này là nhanh hơn bởi vì bạn không luôn luôn kiểm soát các đối tượng bạn đang serializing và tạo ra một lớp trung gian serializable mất một chút thời gian hơn. – Tristan

5

Đầu tiên tạo ra C# lớp học với http://json2csharp.com/ Sau đó sử dụng http://james.newtonking.com/pages/json-net.aspx cho phân tích

lớp người sử dụng tôi hiện trông như thế này:

public class User 
{ 
    public string id { get; set; } 
    public string username { get; set; } 
    public string full_name { get; set; } 
    public string profile_picture { get; set; } 
    public string bio { get; set; } 
    public string website { get; set; } 
    public Counts counts { get; set; } 

    public static User SingleFromJSON(string jsonString) 
    { 
     return JsonConvert.DeserializeObject<SingleUser>(jsonString).data; 
    } 

    public static User MultipleFromJSON(string jsonString) 
    { 
     return JsonConvert.DeserializeObject<SingleUser>(jsonString).data; 
    } 

    private class SingleUser 
    { 
     public User data { get; set; } 
    } 

    private class MultipleUsers 
    { 
     public List<User> data { get; set; } 
    } 
} 

public class Counts 
{ 
    public int media { get; set; } 
    public int follows { get; set; } 
    public int followed_by { get; set; } 
} 

siêu dễ dàng: D

+0

Đó là một cách khác, chắc chắn. Không phải ai cũng thích thư viện bên ngoài như thế. Nhưng json.net được tôn trọng. (va nhanh nhẹn) –

Các vấn đề liên quan