2012-06-10 2 views

risposta

38

Ti piace questa:

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 richiede che le classi e i membri siano contrassegnati con DataContract e DataMember. Json.net no. Il primo è più sicuro perché non tutte le classi possono essere completamente ricostruite dalle sole proprietà. Quest'ultimo è più veloce perché non si controlla sempre gli oggetti che si sta serializzando e la creazione di una classe intermediario serializzabile richiede un po 'più di tempo. – Tristan

5

Prima generare classi C# con http://json2csharp.com/ Quindi utilizzare http://james.newtonking.com/pages/json-net.aspx per il parsing

La mia classe utente attualmente appare così:

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; } 
} 

Super facile: D

+0

Questo è un altro modo, di sicuro. Non a tutti piacciono le biblioteche al di fuori del genere. Ma json.net è molto rispettato. (e veloce) –