2017-01-12 2 views
0

API呼び出しからJSONを逆シリアル化する必要があります。以下のJSONスチームを投稿してください。各「エリア」ノードを取得する必要があります。一部の人には子供の子供がいます(これは私が問題を抱えていたことです)。昨日のJSONの前に何があったのか知りませんでした。 持っNetwonsoft.Json参照が はそれが助けかどうかを確認するためにそれをXMLに変換さが、JSONを滞在思考することは、より良い性能を持っています追加:私は考え出した何JSONを子アイテムとともに非直列化

文字列として AREA_NAME(JSONで "ID")の文字列として AREA_ID(JSONで "名前")の文字列として PARENT_ID(JSONで親 "ID")

vb.netクラスには、次の特性を有しています

したがって、次のJSONからすべてのノードを取得するための開始点を考えてください。 ----- JSONストリーム-----

{"areas": 
    [{"id":"1353331688024941487","name":"NGT","children": 
     [{"id":"1353331688024941488","name":"Other","children": 
      [ 
      {"id":"1353331688024941489","name":"Independence Office","children":[]}, 
      {"id":"1353331688024941490","name":"Lordstown Pipe Receipt Site (PRS)","children":[]}, 
      {"id":"1353331688024941491","name":"Marion Pipe Receipt Site (PRS)","children":[]}, 
      {"id":"1353331688024941492","name":"Marion Warehouse Facility","children":[]}, 
      {"id":"1353331688024941493","name":"Port of Toledo Pipe Receipt Site (PRS)","children":[]}, 
      {"id":"1353331688024941494","name":"Spread -1 - No facility","children":[]}, 
      {"id":"1353331688024941495","name":"Spread -2 - Wadsworth Office","children":[]}, 
      {"id":"1353331688024941496","name":"Spread -3 - Toledo Office","children":[]}, 
      {"id":"1353331688024941497","name":"Spread -4 - Dundee Office","children":[]} 
      ] 
     }, 
     {"id":"1353331688024941498","name":"Spread-1","children": 
      [ 
      {"id":"1353331688024941499","name":"Compressor Station 1","children":[]}, 
      {"id":"1353331688024941500","name":"Field Inspectors 1","children":[]}, 
      {"id":"1353331688024941501","name":"Meter Station 1","children":[]}, 
      {"id":"1353331688024941502","name":"Meter Station 2","children":[]}, 
      {"id":"1353331688024941503","name":"Meter Station 3","children":[]}, 
      {"id":"1353331688024941504","name":"NDE Testing 1","children":[]}, 
      {"id":"1353331688024941505","name":"Pipeline 1","children":[]}, 
      {"id":"1353331688024941506","name":"Wareyard 1-1","children":[]} 
      ] 
     }, 
     {"id":"1353331688024941507","name":"Spread-2","children": 
      [ 
      {"id":"1353331688024941508","name":"Compressor Station 2","children":[]}, 
      {"id":"1353331688024941509","name":"Field Inspectors 2","children":[]}, 
      {"id":"1353331688024941510","name":"Meter Station 5","children":[]}, 
      {"id":"1353331688024941511","name":"NDE Testing 2","children":[]}, 
      {"id":"1353331688024941512","name":"Pipeline 2","children":[]}, 
      {"id":"1353331688024941513","name":"Wareyard 2-1","children":[]} 
      ] 
     }, 
     {"id":"1353331688024941514","name":"Spread-3","children": 
      [ 
      {"id":"1353331688024941515","name":"Compressor Station 3","children":[]}, 
      {"id":"1353331688024941516","name":"Compressor Station 4","children":[]}, 
      {"id":"1353331688024941517","name":"Field Inspectors 3","children":[]}, 
      {"id":"1353331688024941518","name":"Meter Station 6","children":[]}, 
      {"id":"1353331688024941519","name":"NDE Testing 3","children":[]}, 
      {"id":"1353331688024941520","name":"Pipeline 2","children":[]}, 
      {"id":"1353331688024941521","name":"Wareyard 3-1","children":[]} 
      ] 
     }, 
     {"id":"1353331688024941522","name":"Spread-4","children": 
      [ 
      {"id":"1353331688024941523","name":"Field Inspectors 4","children":[]}, 
      {"id":"1353331688024941524","name":"Meter Station 4","children":[]}, 
      {"id":"1353331688024941525","name":"NDE Testing 4","children":[]}, 
      {"id":"1353331688024941526","name":"Pipeline 4","children":[]}, 
      {"id":"1353331688024941527","name":"Wareyard 4-1","children":[]}, 
      {"id":"1353331688024941528","name":"Wareyard 4-3","children":[]}, 
      {"id":"1353331688024941529","name":"Wareyard 4-4","children":[]} 

      ] 
     } 
    ] 
    } 
    ] 
} 

おかげで、助けに感謝。

+0

チェックアウトメソッド 'JsonConvert.DeserializeObject'。 'JsonSerializerSettings'オブジェクトを使用して、特に独自の' ContractResolver'を設定することによって、逆シリアル化を調整できます。 –

+3

Alex Bが記述したメソッドを使用すると、クラスを作成して[jsonurils.com](http://jsonutils.com/)を使用してデータを非常に簡単にデシリアライズすることができます。あなたのjsonをテキストボックスにコピーすると、vb.netクラスのソースコードが作成されます – soohoonigan

+2

Visual Studioでクラスを作成できます。 JSONをクラスとして貼り付けてください** – Plutonix

答えて

0

「エリア」というプロパティを1つ追加して、もう1つのクラス「AreaModel」が必要です。 あなたのクラスは次のようになります。

public class AreaModel 
{ 
    public List<Area> Areas { get; set; } 
} 
public class Area 
{ 
    [JsonProperty(PropertyName = "id")] 
    public string Area_Name 
    { 
     get; 
     set; 
    } 

    [JsonProperty(PropertyName = "name")] 
    public string Area_ID {get;set;} 

    [JsonProperty(PropertyName= "children")] 
    public List<Area> Children 
    { 
     get;set; 
    } 
} 

次に、次のようにJSON文字列を逆シリアル化できます。

var areaModel = JsonConvert.DeserializeObject<AreaModel>(areaJSON); 

foreach (var area in areaModel.Areas) 
{ 
    DisplayAreas(area); 
} 

private static void DisplayAreas(Area area) 
{ 
    Console.WriteLine(area.Area_Name); 
    if(area.Children != null && area.Children.Count > 0) 
    { 
     foreach(var child in area.Children) 
     { 
      DisplayAreas(child); 
     } 
    } 
} 
+0

ありがとう、お試しください – Brettvd

+0

お互いのおかげで、うまくいきました。 – Brettvd

1

Visual Studioで必要なクラスを作成するか、オンラインロボットを使用できます。 VSでは、クリップボード上のJSON、編集でからChildクラスが実際にあることをクラス

どちら彼らが認識しないという点で少し密集しているよう>貼り付けJSON - >は特別を貼り付けあなたは同じものを両方のために使うことができます。 は実際には、AreaChildクラスも同じです:

Public Class AreaContainer 
    Public Property areas As AreaItem() 
End Class 

Public Class AreaItem 
    Public Property id As String 
    Public Property name As String 
    Public Property children As AreaItem() ' no need for a Child1 
End Class 

デシリアライズ:

Dim jstr = ...wherever you get it 
Dim myareas = JsonConvert.DeserializeObject(Of AreaContainer)(jstr) 

私はあなたが後にあるかわからないのですが、これはNGT.Other子供の名前を印刷し、 の子供のの数です。

For n As Int32 = 0 To myareas.areas(0).children(0).children.Count - 1 
    Console.WriteLine("Name {0} => children: {1}", 
         myareas.areas(0).children(0).children(n).name, 
         myareas.areas(0).children(0).children(n).children.Count) 
Next 

名インディペンオフィス=>子供:0
名前Lordstownパイプレシートサイト(PRS)=>子供:0
名前マリオンパイプレシートサイト(PRS)=>子供:0
名前0
名前スプレッド-2 - ワズワースオフィス=>: - いいえ、施設=>子供0
名前スプレッド-1:マリオン倉庫施設=>子供:トレドパイプレシートサイト(PRS)=>子どもの0
名ポート子供:0
名前スプレッド-3 - トレドオフィス=>子供:0
名前スプレッド-4 - ダンディーオフィス=>子供:0

  • インテリセンスは、あなたがクラス
  • を持っていたら、あなたは構造をナビゲートするのに役立ちます
  • ローカル]ウィンドウには、コレクションを拡大し、あなたのコードは、最初の構文解析することによってで動作するように持っているオブジェクトを、ここで他の記事に示されているように、あなたは結果を簡素化することができ、異なるデータ要素に

を取得する方法「を参照してください。」のに役立ちますJSON、 areas部分のみを配列に逆シリアル化します。 myAreas変数とAreaContainerクラスは削除されていますが、どちらもほとんど目的を果たしません。

+0

ありがとう、これを試してみましょう。 – Brettvd

関連する問題