2016-09-09 38 views
-4

このJSON構造体をデシリアライズして定義する際に問題が発生しました。私はここでレールを外しているので、これを元の作業位置に戻しました。C#JSON配列を逆シリアル化する

私のJSONのstuctureがある:ここでは

[{ 
"name": "Name1", 
"description": "Description of this process", 
"Location": "ANY", 
"SubItems": [{ 
    "name": "sub1", 
    "required": true, 
    "description": "This is a short description" 
}, { 
    "name": "sub2", 
    "required": true, 
    "description": "This is a short description" 
}, { 
    "name": "sub3", 
    "required": true, 
    "description": "This is a short description" 
}], 
"outputs": [{ 
    "name": "out1", 
    "required": false 
}, { 
    "name": "exit code", 
    "required": false 
}] 
}, { 
    "name": "Name2", 
    "description": "This is a short description", 
    "Location": "ANY", 
    "SubItems": [{ 
     "name": "sub1", 
     "required": false, 
     "description": "This is a short description" 
     }] 
    }] 

は最後に働いていた私のC#JSON形式の定義です。

私は現在、テストのために2つの定義をキャプチャしています。

は、ここで私が述べたように、私は出力の少なくとも最初の3最上位レベルのJSON要素を取得することができ、私のデシリアライズオブジェクト

var Object = JsonConvert.DeserializeObject <List<JsonObject>>(txt); 
      foreach (JsonObject JsonObject in Object) 
      { 
       Console.WriteLine("Name: " + JsonObject.ProcessName); 
       Console.WriteLine(); 
       Console.WriteLine("Description: " +JsonObject.ProcessDescription); 
       Console.WriteLine(); 
      } 

です。 "SubItems"と "outputs"を取得しようとすると問題が始まります

私は以下のリンク先の構造に従っていますが、それを理解するのは非常に難しいですが、問題。私は単純に多次元配列のJSONオブジェクトを持っています。文字通り一流を持っている、と私は試してみてくださいしようとした2つのサブ階層

...

List<List<JsonObject>>Object = JsonConvert.DeserializeObject <List<List<JsonObject>>>(txt); 

とJSON定義の3セットと異なる名前で同じの2つのリストを持っていることを試みました。

と階層foreach文を実施したが、その後、私は一番上のJSONの定義にアクセスすることができませんでした、と何も私は必要なもの「サブアイテム」

の実際の要素のために書いていたが、取得することはありませんそれぞれのオブジェクトに、本当に。

How to deserialize a json file with multidimensional array to convert it to object in c#

に関する問題

+3

にそうであるように、あなたはそれがない、そのモデルを飾るためにJsonPropertyを使用することができます配列が多次元であるように見えますが、JsonObjectの内部には配列があります。 –

+1

JSONが無効です。 http://jsonlint.com/にアップロードすると、さまざまなエラーが表示されます。問題を[再現する](https://stackoverflow.com/help/mcve)JSONを含めるように質問を編集できますか? – dbc

+0

Raderick、それは多次元アレイの定義です。 – Autonomic

答えて

2

これは、マルチ次元アレイではありません。配列を含む配列オブジェクト。 だからあなたのモデルが

public class SubItem 
{ 
    public string Name { get; set; } 
    public bool Required { get; set; } 
    public string Description { get; set; } 
} 

public class Output 
{ 
    public string Name { get; set; } 
    public bool Required { get; set; } 
} 

public class JsonObject 
{ 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public string Location { get; set; } 
    public List<SubItem> SubItems { get; set; } 
    public List<Output> Outputs { get; set; } 
} 

に続き、あなたが

var obj = JsonConvert.DeserializeObject<List<JsonObject>>(jsonstring); 

としてPSをデシリアライズすることができますようになりますあなたが質問

+0

こんにちはL.Bあなたの解決に感謝!上記のように私はこのモデルを実装しました。だから私がこれを実行すると、SubItemsは出力と同様に空白になります。 私は、foreachループ内のSubItemsを使ってforeachループを試しました。System.NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません。 – Autonomic

+0

また、JsonPropery参照を消去するたびに空白のリストが戻ってきます。 – Autonomic

+0

進歩!私はメインループの内側に2つのforeachループを持っています。 foreachの(オブジェクトで何とかOBJ){ foreachの(Object.InputsParamsにおけるVAR入力){//出力は} コンソールに} Object.OutputParams {//出力 foreachの(VAR出力をコンソールする}私はバック取得してい をしかし、実際にはわかりません。私は出力が常に存在していないか、JSONモデルの戻り値にも列挙されていないことを知っています。 未処理の例外: System.NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません。 – Autonomic

関連する問題