我对执行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使用dotliquid实现了类似的特性。https://learn.microsoft.com/en-us/azure/logic-apps/logic-apps-enterprise-integration-liquid-transform
有什么不同的方法?我是否需要将JObject/JArray解析为嵌套字典,或者有哪些替代方案?
发布于 2019-03-25 15:48:43
您可以使用来自DictionaryConverter和Hash.FromDictionary的Deserialize JSON recursively to IDictionary使其工作。
var json = JsonConvert.DeserializeObject<IDictionary<string, object>>(@"{ ""names"":[{""name"": ""John""},{""name"":""Doe""}] }", new DictionaryConverter());
var jsonHash = Hash.FromDictionary(json);
var templatetest = "<h1>{{device}}</h1><h2>{{speed}}</h2>{% for client in names %}<h4>{{client.name}}</h4>{% endfor %}";
var template = Template.Parse(templatetest);
var render = template.Render(jsonHash);https://stackoverflow.com/questions/50280940
复制相似问题