2016-12-10 6 views
2

でデシリアライズする方法、キーが異なる場合、key1からkeyNまでのJSONファイルをどのように逆シリアル化するのですか?私はPythonを使用すると非常に簡単です。 import pandas as pd myJson = pd.json.loads(json) 2行のコードを使用していますが、C#を使用すると非常に難しいです。ありがとう。私はキーがkey1からkey1になる可能性があるので、ビジュアルスタジオ - >編集 - > Paste Special - > Jsonをクラスとして貼り付けると、アイテムキーごとに多くのクラスが生成されます。キー1000.JSONファイルをc#

public class Rootobject 
{ 
    public Key1 key1 { get; set; } 
    public Key2 key2 { get; set; } 
    public Key3 key3 { get; set; } 
} 

2.now私は以下の方法で使用しましたが、私はまだPythonほど簡単ではないと思います。

JObject items = JObject.Parse(json); 
foreach(var item in items) 
{ 
     JObject v = JObject.Parse(item.Value.ToString()); 
      foreach(KeyValuePair<string, JToken> property in v) 
      { //do something} 

} 

JSON文字列:

{ 
    "key1": 
    { 
     "id":1, 
     "name":"i", 
     "AllocationInfo": 
      { 
       "State":"Init", 
       "Name":"test", 
       "TModel": 
        { 
         "Name":"test2", 
          "key":"1232445", 
          "v":{ 
             "id":"090", 
             "Name":"tom"  
            } 
         } 
      } 
    }, 
"key2": 
    { 
     "id":1, 
     "name":"i", 
     "AllocationInfo": 
      { 
       "State":"Init", 
       "Name":"test", 
       "TModel": 
        { 
         "Name":"test2", 
          "key":"1232445", 
          "v":{ 
             "id":"090", 
             "Name":"tom"  
             } 
         } 
      } 
    }, 
"key3": 
    { 
     "id":1, 
     "name":"i", 
     "AllocationInfo": 
      { 
       "State":"Init", 
       "Name":"test", 
       "TModel": 
        { 
         "Name":"test2", 
          "key":"1232445", 
          "v": { 
             "id":"090", 
             "Name":"tom",  
             "D":{"id":"7890"} 
             } 
         } 
      } 
    } 
} 
+0

あなたはので、これはクラスで表現されますあなたのJSONに3つのオブジェクトを持って、そこにありますそれをクラスにデシリアライズする他の方法はありません。あなたがjsonを変更することができる場合は、キークラスの配列として表現すると、キークラスは1つしかなく、ルートオブジェクトは 'List ' – mybirthname

+0

になります。このJsonはテストファイルです。実際のJsonはもっと複雑ですそれよりも。同時に私は別のクラスであなたの言及されたメソッドを使用しましたが、このjson文字列のために、私はpythonのjson.loads()関数のようにもっと簡単な方法を理解したいと思います。 – shenhaizhilong

答えて

1

使用DeserializeObject、それから辞書を取得:

var r = JsonConvert.DeserializeObject<Dictionary<string, Key>>(txt); 

は、あなたのクラスを宣言します。

public class Key 
{ 
    public int id { get; set; } 
    public string name { get; set; } 
    public AllocationInfo AllocationInfo { get; set; } 
} 

public class AllocationInfo 
{ 
    public string State { get; set; } 
    public string Name { get; set; } 
    public TModel TModel { get; set; } 
} 


public class TModel 
{ 
    public string Name { get; set; } 
    public string key { get; set; } 
    public v v { get; set; } 
} 

public class v 
{ 
    public string id { get; set; } 
    public string name { get; set; } 
} 
+0

ありがとう、それは素晴らしいです。 JsonConvert.DeserializeObject >(txt);私は前にそれを試したが失敗した。今すぐ成功しました。私は実際のプロジェクトでそれを試してみます。おそらく、Pythonのようにシンプルではないかもしれませんが、今は十分です。 – shenhaizhilong

1

あなたはペースト特別を使用するときは、全体JSONを貼り付けました。しかし、私はすべてのkeyNオブジェクトに対して1つのクラスを生成したいと思うと思います。 Newtonsoftを使用してjsonをリストに逆シリアル化することができます。

var myKeys = Newtonsoft.Json.JsonConvert.DeserializeObject<List<KeyN>>(json); 
+0

@martineau非常に感謝します。私はこの問題を解決する別の方法を考え出します。 – shenhaizhilong