我想渲染一个Scriban模板,它包含ExpandoObject
或任何其他可以从JSON字符串生成的数据类型:
var json = "....";
var dyn = JsonConvert.DeserializeObject<ExpandoObject>(json);
var template = Scriban.Template.Parse("Hello {{ data.foo }}!");
var result = template.Render(dyn);
Scriban不适用于ExpandoObject
,因为它们被解析为{ key = '', value = '' }
对象的列表。在我的用例中,为数据声明一个类型不是一个选项,因为JSON模式不是先验已知的。
- 将ExpandoObject转换为dynamic与直接使用
ExpandoObject
的行为相同。 - 我尝试将JSON转换为
dynamic
,这导致了一个异常:
System.Reflection.TargetParameterCountException:“参数计数不匹配。”
我可以转换数据或配置Scriban来呈现动态数据吗?
3条答案
按热度按时间ecbunoof1#
根据前面的答案,这是一个复杂对象的解决方案:
它利用了
ExpandoObject
的复杂属性在从JSON转换为ExpandoObjects
时始终是ExpandoObjects
的事实。它递归地将复杂成员类型的ScriptObjects
和所有其他属性的对象本身添加到``ScriptObject。 请注意,我的解决方案使用Scriban的默认成员重命名,其中
FirstName变为
first_name`,依此类推。uurity8g2#
不确定以前的版本是否支持这样做,但看起来这更有效,Scriban example(github)可以做到这一点。
gev0vcfq3#
如果你有一个简单的对象,你可以尝试这样做。