2012-06-10 2 views

Antwort

38

So:

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 erfordert, dass Klassen und Member mit DataContract und DataMember gekennzeichnet sind. Json.net nicht. Ersteres ist sicherer, weil nicht alle Klassen vollständig aus ihren Eigenschaften allein wiederhergestellt werden können. Letzteres ist schneller, da Sie die Objekte, die Sie serialisieren, nicht immer kontrollieren und das Erstellen einer serialisierbaren Zwischenklasse etwas länger dauert. – Tristan

5

Erste C# -Klassen mit http://json2csharp.com/ Dann nutzen http://james.newtonking.com/pages/json-net.aspx zum Parsen

Mein Benutzerklasse generieren sieht derzeit wie folgt aus:

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 einfach: D

+0

Das ist natürlich ein anderer Weg. Nicht jeder mag solche Bibliotheken. Aber json.net ist gut respektiert. (und schnell) –