2012-06-10 14 views

Odpowiedz

38

Jak to:

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 wymaga, aby klasy i członkowie zostali oznaczeni przez DataContract i DataMember. Json.net nie. Ta pierwsza jest bezpieczniejsza, ponieważ nie wszystkie klasy można w pełni odbudować z samych tylko ich właściwości. Ta ostatnia jest szybsza, ponieważ nie zawsze kontrolujesz obiekty, które serializujesz, a tworzenie klasyfikowalnej klasy pośredniej zajmuje trochę więcej czasu. – Tristan

5

najpierw wygenerować C# klas z http://json2csharp.com/ Następnie użyj http://james.newtonking.com/pages/json-net.aspx do parsowania

Moja klasa użytkownik aktualnie wygląda tak:

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

bardzo proste: D

+0

To na pewno inny sposób. Nie każdy lubi takie biblioteki na zewnątrz. Ale json.net jest bardzo szanowany. (i szybko) –