強く型付けされたオブジェクトのリストがあります。言うList<Activity>
。それぞれActivity
に、、、、、などの多くのプロパティがあります。リストは階層的です。つまりTitle
、リストId
内ParentActivity
の各アクティビティには子アクティビティがあり、各子アクティビティには独自の子アクティビティがある場合があります。ChildrenActivities
ActivityType
このリストをJSONに変換して、サードパーティのJavaScriptUIライブラリで使用できるようにする必要があります。ただし、ターゲットリストには、元のリストのプロパティのサブセット、たとえば、、Id
およびが含まれてTitle
います。
同じ条件のタイプと場所がたくさんあるので、ターゲットリストタイプを定義したくないので、強く型付けされたターゲットはありません。言い換えれば、私はクラスを持ってList<SubActivity>
おらず、クラスを作成したくありませんSubActivity
。
この階層変換をその場で実行し、ターゲットリストからJSON文字列を取得するにはどうすればよいですか?dynamic
キーワード、匿名タイプを使用することはまったく可能ですか?
アップデート:
それを想像してみてくださいActivity
:
public class Activity
{
public int Id { get; set; }
public ActivityType Type { get; set; }
public string ActivityTitle { get; set; }
public string Description { get; set; }
public Activity? Parent { get; set; }
public List<Activity> Children { get; set; }
}
そして私はこのクラスインスタンスの階層リストを持っています:
List<Activity> activities = ActivityManager.GetActivitiesHierarchically();
次に、この階層リストをJSON文字列に変換する必要がありますが、Description
たとえば、一部のプロパティをレンダリングする必要はありません。したがって、リストをJSONにシリアル化する前に、プロジェクション(ある種の変換)を行う必要があります。JsonActivity
次のような名前のタイプを作成する場合があります。
public class JsonActivity
{
public int id { get; set; }
public string title { get; set; }
public List<JsonActivity> items { get; set; }
}
しかし、このパターンはさまざまなタイプのコードの多くの場所で繰り返されているため、JsonEntity
DTOを定義したくありません。
オンザフライで投影を使用して階層変換を行う方法はありますか?