2011-10-08 11 views
7

C#を使用してJSON文字列をデコードするサンプルコード/ libを探しています。C#を使用してJSON文字列をデコードする方法は?

var data = new Dictionary<string,string>(); 
data.Add("..", "..."); 
var json_encoded = new JavaScriptSerializer().Serialize(data); 

が、私はどのように、復号化するために:私はこれを行うことができますデコードする

var json_decoded = ?? 

ありがとうございます!

+0

をジャスト[Json.NET](HTTPを使用james.newtonking.com/projects/json-net.aspx)を使用すると、作成する必要のある任意のタイプのシリアル化およびデシリアライズが可能です。 –

+0

可能な複製[Json Deserialize C#](http://stackoverflow.com/questions/7895105/json-deserialize-c-sharp) – nawfal

答えて

10

あなたがこれを行うことができます://:

var data = new Dictionary<string, string>(); 
data.Add("foo", "baa"); 

JavaScriptSerializer ser = new JavaScriptSerializer(); 
var JSONString = ser.Serialize(data); //JSON encoded 

var JSONObj = ser.Deserialize<Dictionary<string, string>>(JSONString); //JSON decoded 
Console.Write(JSONObj["foo"]); //prints: baa 
+3

これはJSON文字列を逆シリアル化してTypeに戻さないことに注意してください。文字列をデシリアライズしてTypeに変換するのは、はるかに堅牢なソリューションです。 –

8

このJSONを取ると、あなたは(T)を指定すると、強く型付けされたクラスに変換します

public static T Deserialize<T>(string json) 
     { 
      var obj = Activator.CreateInstance<T>(); 
      using(var ms = new MemoryStream(Encoding.Unicode.GetBytes(json))) 
      { 
       var serializer = new DataContractJsonSerializer(obj.GetType()); 
       obj = (T) serializer.ReadObject(ms); 
       return obj; 
      } 
     } 

このクラスを取り、JSON

public static string Serialize<T>(T obj) 
    { 
     var serializer = new DataContractJsonSerializer(obj.GetType()); 
     using (var ms = new MemoryStream()) 
     { 
      serializer.WriteObject(ms, obj); 
      return Encoding.Default.GetString(ms.ToArray()); 
     } 
    } 

としてそれをシリアル化します。注:イン最初の例では、Tのタイプを指定するバッキングクラスが必要です。あなたは、これはどこかに指定されている必要がありますUser Tが型であることを告げたのであれば:

public class User 
    { 
     public string Username { get; set; } 
     public string Firstname { get; set; } 
    } 
+1

* DataContractJsonSerializerオブジェクトを(シリアル化可能なタイプごとに)構築する価値がありますか?各シリアライゼーションのために新しいものを作成しますか? – Timwi

+0

@ティムウィー、それは異なります。インスタンスを保持するためにはより多くのメモリが必要になりますが、そうしないと経済的なスピードが遅くなります。それはあなたの特定の状況に本当に沸騰します。理想的には、頻繁に使用されるシリアライザを維持し、シリアライザを使用しないシリアライザを捨てることが望ましいでしょう。 –

関連する問題