2016-11-10 23 views
0

かなり愚かな質問をする。それを理解することはできませんでした。MVCコントローラのネストされたJson配列

C#MVCコントローラのアクションでは、テスト目的でJson Arrayをモデル化する必要があります。

しかし、これは代わりに有効なJSONであることの私のコンパイルエラーを示しています

var result = { 
    "controllerId": "controller1", 
    "controllerName": "ControllerOne" 
}; 

しかし、これは完全に有効です。そう

var scheduleResult = new[] 
{ 
    new { scheduleId = "schedule1",scheduleName = "scheduleOne"}, 
    new { scheduleId = "schedule2",scheduleName = "scheduleTwo"} 
}; 

なぜ?

また、ネストされたJSON配列を作成する方法:

var scheduleResult = new[] 
{ 
    new { scheduleId = "schedule1",scheduleName = "scheduleOne",new[]{ new {doorId="Door1",doorName="DoorOne"}, new { doorId = "Door2", doorName = "DoorTwo" } } }, 
    new { scheduleId = "schedule2",scheduleName = "scheduleTwo"} 
}; 

しかし、それは、構文のエラーを示しています

私が試してみました。何をすべきか ?

私はその配列の各要素内に入れ子になった配列を持つ必要があります。

ありがとうございます。

+0

[オブジェクトとコレクションの初期化(C#プログラミングガイド)](https://msdn.microsoft.com/en-us/library/bb384062.aspx)を参照してください。 – dbc

答えて

1

まあ、C#はあなたが書いた方法をサポートしていません。あなたはC#でJSONをタイプするだけで、残念ながらそれが動作するとは思いません。

var result = new 
{ 
    controllerId = "controller1", 
    controllerName = "ControllerOne", 
    myArray = new [] 
    { 
      "a", 
      "b" 
    } 
}; 

これは、API呼び出しの結果として返すと問題なくJSONに変換されます。

ネストされた配列は、名前を付ける必要があるため動作しません。ネーミングされた配列は名前を付けずに配列プロパティを持つことはできません。上記の例を参照してください。

+0

しかし、入れ子になったJson配列を書く方法は、質問で尋ねたとおりです。あなたは助けてくれますか? – StrugglingCoder

0

Dictionary<TKey, TValue>を使用しないのはなぜですか?

シンプルなJSON:

IDictionary<string, string> obj = new Dictionary<string, string>(); 
obj.Add("controllerId", "controller1"); 
obj.Add("controllerName", "ControllerOne"); 

// {"controllerId":"controller1","controllerName":"ControllerOne"} 
string json = JsonConvert.SerializeObject(obj); 

ネストされたJSON:ここ

IList<string> obj = new List<string>(); 

IDictionary<string, string> first = new Dictionary<string, string>(); 
first.Add("scheduleId ", "schedule1"); 
first.Add("scheduleName", "scheduleOne"); 

IDictionary<string, string> second = new Dictionary<string, string>(); 
second.Add("scheduleId ", "schedule2"); 
second.Add("scheduleName", "scheduleTwo"); 

string first_json = JsonConvert.SerializeObject(first); 
string second_json = JsonConvert.SerializeObject(second); 

obj.Add(first_json); 
obj.Add(second_json); 

// ["{\"scheduleId \":\"schedule1\",\"scheduleName\":\"scheduleOne\"}","{\"scheduleId \":\"schedule2\",\"scheduleName\":\"scheduleTwo\"}"] 
string json = JsonConvert.SerializeObject(obj); 
0

まず第一に、我々は今すぐに返品種別

public class ScheduleModel 
    { 
     public List<Schedule> ScheduleList { get; set; } 
    } 

    public class Schedule 
    { 
     public int ScheduleId { get; set; } 
     public string ScheduleName { get; set; } 
     public List<Door> DoorList { get; set; } 
    } 

    public class Door 
    { 
     public int DoorId { get; set; } 
     public string DoorName { get; set; } 
    } 

の同じパターンでモデルクラスを作成する必要がありますコントローラは、テストデータを作成します。

List<Door> doorList = new List<Door>(); 
      doorList.Add(new Door{DoorId = "Door1",DoorName = "DoorOne"}); 
      doorList.Add(new Door{DoorId = "Door2",DoorName = "DoorTwo"}); 

      List<Schedule> scheduleList = new List<Schedule>(); 
      scheduleList.Add(new Schedule{ 
       ScheduleId = "schedule1", 
       ScheduleName = "scheduleOne", 
       DoorList = doorList 
      }); 

      scheduleList.Add(new Schedule 
      { 
       ScheduleId = "schedule2", 
       ScheduleName = "scheduleTwo", 
      }); 

      return Json(scheduleList, JsonRequestBehavior.AllowGet); 

この回答が有益な場合は、回答としてマークしてください。

関連する問題