I持って、私はAPIから取得しています次のようなJSON構造:は、LINQクエリを使用して、ネストされたオブジェクトの照会
{
"event_instance": [
{
"id": 55551244,
"event_id": 11112,
"name": "Brown Belt Karate Class",
"staff_members": [
{
"id": 12345,
"name": "John Smith"
}
],
"people": [
{
"id": 111,
"name": "Jane Doe"
},
{
"id": 222,
"name": "Josh Smith"
},
{
"id": 333,
"name": "Ben Johnson"
}
],
"visits": [
{
"id": 1234578,
"person_id": 111,
"state": "completed",
"status": "complete"
},
{
"id": 1239865,
"person_id": 222,
"state": "completed",
"status": "complete"
},
{
"id": 1239865,
"person_id": 333,
"state": "canceled",
"status": "cancel"
}
]
}
]
}
私はJSON.NET使用して次の.NETオブジェクトにこれをデシリアライズしています:
を私は、シリアル化を解除するには、次のコードを使用しています[JsonObjectAttribute("event_instance")]
public class EventInstance
{
[JsonPropertyAttribute("id")]
public int Id { get; set; }
[JsonPropertyAttribute("event_id")]
public int EventId { get; set; }
[JsonPropertyAttribute("name")]
public string Name { get; set; }
[JsonPropertyAttribute("staff_members")]
public List<StaffMember> StaffMembers { get; set; }
[JsonPropertyAttribute("visits")]
public List<Visit> Visits { get; set; }
[JsonPropertyAttribute("people")]
public List<Student> Students { get; set; }
}
[JsonObjectAttribute("staff_members")]
public class StaffMember
{
[JsonPropertyAttribute("id")]
public int Id { get; set; }
[JsonPropertyAttribute("name")]
public string Name { get; set; }
}
[JsonObjectAttribute("people")]
public class People
{
[JsonPropertyAttribute("id")]
public int Id { get; set; }
[JsonPropertyAttribute("name")]
public string Name { get; set; }
}
[JsonObjectAttribute("visits")]
public class Visits
{
[JsonPropertyAttribute("id")]
public int Id { get; set; }
[JsonPropertyAttribute("person_id")]
public int PersonId { get; set; }
[JsonPropertyAttribute("state")]
public string State { get; set; }
[JsonPropertyAttribute("status")]
public string Status { get; set; }
}
:
var event = (EventInstance)JsonConvert.DeserializeObject(json, typeof(EventInstance));
以上が正常に動作して私を与えます上記json構造の正確なオブジェクト表現。今、私はこのイベントオブジェクトをクエリしてフィルタリング/プロジェクトを新しい構造にしようとしています。それからjsonにシリアル化してブラウザに送ります。私は、 "完了"状態と "完了"状態にあるイベントの学生のリストを返す必要があります。ご覧のように、peopleはvisits配列(idとperson_id)との結びつきを配列します。
- 11112、ブラウンベルト空手クラス、ジョン・スミス、111、ジェーン・ドウ
- 11112、ブラウンベルト空手クラス、ジョン・スミス、222、ジョシュ・スミス
私はこのような何かを試してみました:
var studentList = from theClass in event
from staff in theClass.StaffMembers
from student in theClass.People
from visits in theClass.Visits
where visits.Status == "complete"
&& visits.State == "completed"
select new
{
event_id = theClass.EventId
class_name = theClass.Name,
instructor_name = staff.Name,
student_id = student.Id,
student_name = student.Name
};
string _data = JsonConvert.SerializeObject(studentList);
は、当然のことながら、これは、重複する学生の名前を生成します。私はlinqに新しいです。基本的には、私は人々に参加して、結びつけてアレイを訪問する必要があるので、このイベントのルートデータとともに、そのIDの単一の生徒を戻します。これを行うためのよりよい方法についてのアドバイスは、あまりにも高く評価されています!
ああ、今理にかなっています。 Linqは慣れるのに時間がかかるでしょう。ありがとう!! – MattoMK