0

我有一个端点,可以让我获取图表的顶部节点。我还允许客户端指定他希望检索的顶级节点的子节点:

例如:

/libraries/5?with=banner|videos

这将为我检索一个带有横幅对象和视频列表的库。

我提供了一个完整的查询语言,它支持嵌套。例如,如果您想要相同的结构但包括每个视频的封面和章节,您会要求:

/libraries/5?with=banner|videos[cover|chapters]

我需要在请求进来时动态构建对象。我看过Clay,但该项目似乎有点旧,而且我确信有比使用 ExpandoObject 在运行时构建对象更好的方法。

如果有人有任何想法,我将不胜感激?

4

2 回答 2

0

ExpandoObject是将动态属性分配给对象的方法。

您可以使用 Dictionary,但代码会变得很难看。考虑以下示例 -

Dictionary<string, object> parent = new Dictionary<string, object>();
parent["known_prop"] = new List<object>();    
parent["dynamic_prop"] = new Dictionary<string, object>();
parent["dynamic_prop"]["some_value"] = new List<object>();

同样可以在 ExpandoObject 中以非常简洁的方式编写 -

var a = new ExpandoObject();
a.Prop1 = new List<Object>();
a.Prop2 = new ExpandoObject();
a.Prop2.Val = new List<Object>();
于 2015-03-23T08:14:05.483 回答
0

C# 在设计的动态对象中不太好 - 它的静态类型语言。有一种dynamic类型可以模拟对其他动态(编译时未知)结构的静态访问。您可以使用它来分配和检索值。

如果您通过端点了解返回 json 或 xml 的 Web 服务,那么您无需创建动态对象,只需构建预期的结构。Newtonsoft json serializer for-instance 可以很好地序列化字典:

_dictionary.Add("banner", new Banner())

会产生

{
    "banner" : { ... banner properties ... }
}
于 2015-03-23T08:14:19.323 回答