我有一个端点,可以让我获得图表的顶级节点。我还允许客户端指定他希望检索的节点是顶级节点的子节点:
例如:
/libraries/5?with=banner|videos
这将检索一个包含横幅对象和视频列表的库。
我提供了一种支持嵌套的完整查询语言。例如,如果您想要相同的结构,但包括每个视频的封面和章节,您可以请求:
/libraries/5?with=banner|videos[cover|chapters]
我需要在请求进入时动态构建对象。我看过Clay,但是项目看起来有点老了,我确信有更好的方法可以在运行时构建对象而不是使用ExpandoObject。
如果有人有任何想法,我会非常感激吗?
答案 0 :(得分: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>();
答案 1 :(得分:0)
C#在动态对象方面不是很好,这是设计的 - 它是静态类型语言。有dynamic
类型模拟静态访问,否则动态(编译时未知)结构。您可以使用它来分配和检索值。
如果您通过端点了解返回json或xml的Web服务,那么您不需要创建动态对象,只需构建预期的结构。 Newtonsoft json serializer for-instance可以很好地序列化字典:
_dictionary.Add("banner", new Banner())
将产生
{
"banner" : { ... banner properties ... }
}