我对执行JSON转换很感兴趣,并研究了使用dotliquid。
为了避免输入JSON的POCO只是为了能够将其作为变量发送,我想发送反序列化的JSON。从我的理解,我们不能发送动态渲染方法,和JObject或JArray不按预期工作。我尝试反序列化为Dictionary <string,object>,但无法处理嵌套的JSON结构。
液体
[
{%- for p in data.names -%}
{
"name" : {{ p.name }}
} {%- unless forloop.Last == true -%},{% endunless %}
{%- endfor -%}
]
C#代码
Template template = Template.Parse(File.ReadAllText("Maps/account.liquid"));
var json = JsonConvert.DeserializeObject<Dictionary<string, object>>(
@"{ ""names"":[{""name"": ""John""},{""name"":""Doe""}] }");
var jsonHash = Hash.FromAnonymousObject(new { Data = json});
输出量
[
{
"name" :
},
{
"name" :
}
]
我知道Microsoft Logic Apps已经使用dotliquid实现了类似的功能。https://learn.microsoft.com/en-us/azure/logic-apps/logic-apps-enterprise-integration-liquid-transform
有哪些不同的方式?我是否需要将JObject/JArray解析为嵌套的Dictionary,或者有什么替代方案?
2条答案
按热度按时间kmbjn2e31#
您可以使用来自Deserialize JSON recursively to IDictionary<string,object>的DictionaryConverter和Hash.FromDictionary使其工作
deyfvvtc2#
另一个可行的选择是使用
ExpandoObject
转换器:这在我的用例中是可行的,但是我们有一个围绕
Template
的 Package 器,它扩展了可用性以接受其他类型,这可能是很好地处理了动态。