2012-02-22 16 views
1

私は動的なjsonの結果を持っており、そのjsonの文字列のオブジェクトを作成したいと思います。その後、私はそのオブジェクトを逆シリアル化されたオブジェクトで埋めるでしょう。ここにjson文字列があります:Jsonのクラスへの逆シリアル化

[{"_34":{ 
    "Id":"34", 
    "Z":["42b23718-bbb8-416e-9241-538ff54c28c9","c25ef97a-89a5-4ed7-89c7-9c6a17c2413b"], 
    "C":[] 
    } 
}] 

オブジェクトはどのように見えますか?または、どのように私はクラスにこの文字列を逆シリアル化することができます。

ありがとうございました。

答えて

3

すぐに利用できるJavaScriptSerializerまたは何かオープンソースが好きな人は、json.netを使用できます。 Darin Dimitrov's sampleに基づいて

は、ここにあなたがjson.netで行うだろう方法は次のとおりです。

using System.Collections.Generic; 
using System; 
using Newtonsoft.Json; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
      static void Main(string[] args) 
      { 
       string json = "[{\"_34\":{ \"Id\":\"34\", \"Z\":[\"42b23718-bbb8-416e-9241-538ff54c28c9\",\"c25ef97a-89a5-4ed7-89c7-9c6a17c2413b\"], \"C\":[] } }]"; 
       var result = JsonConvert.DeserializeObject<Dictionary<string, Result>[]>(json); 
       Console.WriteLine(result[0]["_34"].Z[1]); 
      } 
    } 

    public class Result 
    { 
     public string Id { get; set; } 
     public string[] Z { get; set; } 
     public string[] C { get; set; } 
    } 
} 
+2

Json.NETだけではなく、オープンソースですが、また、メモリ使用量*ロット* .NET FrameworkのJSSより速く、より効率的。これは非常に良い提案です。 –

+0

どうすればforループのResultオブジェクトを取得できますか?そのjson配列には複数の "_34"オブジェクトが存在する可能性があるためです。 Resultオブジェクトを直接取得することもできます。 – mehmetserif

+1

ループのための[サンプル](https://gist.github.com/1885213)ですが、コードについてさらに助けが必要な場合は、新しい質問をしてください。 –

-2

はevalの関数の中で、あなたの文字列をラップ:

var myObject = eval('(' + myJSONtext + ')'); 
+0

どの名前空間に 'eval'関数が定義されていますか? –

+0

Evalはjavascriptのグローバル関数です。 http://www.w3schools.com/jsref/jsref_eval.asp – digitebs

1

はここに例を示します

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Web.Script.Serialization; 

public class Result 
{ 
    public string Id { get; set; } 
    public string[] Z { get; set; } 
    public string[] C { get; set; } 
} 

class Program 
{ 
    static void Main() 
    { 
     var json = @"[{""_34"": {""Id"": ""34"",""Z"": [""42b23718-bbb8-416e-9241-538ff54c28c9"",""c25ef97a-89a5-4ed7-89c7-9c6a17c2413b""],""C"": []}}]"; 
     var serializer = new JavaScriptSerializer(); 
     var result = serializer.Deserialize<Dictionary<string, Result>[]>(json); 
     Console.WriteLine(result[0]["_34"].Z[1]); 
    } 
} 
0

対象クラス

public class Target 
{ 
    public string Id; 
    public List<string> Z; 
    public List<string> C; 
} 

デシリアライズ

var ser = new JavaScriptSerializer(); 
var obj = ser.Deserialize<Target>(json); 
+1

これは、OPで表示されるJSON文字列では機能しません。 JSON文字列は配列ですが、単一のタイプのターゲットにデシリアライズしようとしています。 –

+0

あなたは正しいです。より正確な答えはDarinの答えを見てください。 – Tx3

関連する問題