我有一个强类型对象列表。说List<Activity>
。每个Activity
都有许多属性,比如Title
, Id
, ParentActivity
, ChildrenActivities
,ActivityType
等。列表是分层的,也就是说,列表中的每个活动都可能有子活动,每个子活动可能仍然有自己的子活动,等等。
我需要将此列表转换为 JSON,以便可以将其与第三方 JavaScript UI 库一起使用。但是,目标列表只有原始列表的一部分属性,例如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。
有没有办法通过动态投影进行分层转换?