私はの強いタイプののオブジェクトを持っています。 List<Activity>
と言ってください。 Activity
には、多くのプロパティ、たとえばTitle
,Id
、ParentActivity
、ChildrenActivities
、ActivityType
などがあります。リストは階層型です。つまり、リスト内の各アクティビティに子アクティビティがあり、各子アクティビティに独自の子アクティビティがある可能性があります。そうです。匿名型(または動的)を持つ別の階層リストに階層リストを投影しますか?
サードパーティのJavaScript UIライブラリで使用できるように、このリストをJSONに変換する必要があります。ただし、ターゲットリストには、元のリストのプロパティのサブセット、たとえばId
とTitle
が含まれています。
私は多くのタイプと同じ条件の多くの場所があるので、私はターゲットリストのタイプを定義したくないので、強いタイプのターゲットを持っていません。つまり、私はList<SubActivity>
を持っておらず、私はSubActivity
クラスを作りたくありません。
どのようにしてこの階層的変換を実行し、ターゲットリストからJSON文字列を取得できますか? dynamic
キーワード匿名のタイプを使用することは可能ですか?
アップデート:私は、この階層を変換する必要があり、今
List<Activity> activities = ActivityManager.GetActivitiesHierarchically();
:
が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; }
}
と私は、このクラスのインスタンスの階層リストを持っていますリストをJSON文字列に変換しますが、たとえばDescription
などのプロパティをレンダリングする必要はありません。したがって、リストをJSONにシリアル化する前に、投影(ある種の変換)を行う必要があります。
public class JsonActivity
{
public int id { get; set; }
public string title { get; set; }
public List<JsonActivity> items { get; set; }
}
しかし、このパターンは、異なるタイプのために私のコードの多くの場所で繰り返されているので、私はJsonEntity
のDTOを定義する必要はありません:私は次のようであるJsonActivity
名前付きの型を作成することがあります。
オンザフライで投影による階層変換を行う方法はありますか?
あなたは、理想的には、正確にあなたが望む何をすべきかをより詳細に記述することができます例を挙げて? 「たくさんの場所」とはどういう意味ですか? 'Activity'に似たいくつかの階層型がありますか?あるいは、いくつかの場所で 'Activity'を使うだけですか?これらの場所の違いは何ですか? – svick
あなたはどのJSONシリアライザを使用していますか? – AakashM
** .NET Framework **から 'JavaScriptSerializer'を使用しています。 –