2012-06-10 25 views

Respuesta

38

De esta manera:

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 requiere que las clases y los miembros estén marcados con DataContract y DataMember. Json.net no. El primero es más seguro porque no todas las clases se pueden reconstruir por completo solo a partir de sus propiedades. Este último es más rápido porque no siempre se controlan los objetos que se serializan y la creación de una clase intermedia serializable requiere un poco más de tiempo. – Tristan

5

Primera generar las clases de C# con http://json2csharp.com/ A continuación, utilice http://james.newtonking.com/pages/json-net.aspx para analizar

Mi clase de usuario Actualmente tiene este aspecto:

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 fácil: D

+0

Esa es otra forma, seguro. No a todos les gustan las bibliotecas externas así. Pero json.net es muy respetado. (y rápido) –

Cuestiones relacionadas