首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于JSON.net的Dotliquid变换

基于JSON.net的Dotliquid变换
EN

Stack Overflow用户
提问于 2018-05-10 20:20:15
回答 1查看 3.1K关注 0票数 8

我对执行JSON转换感兴趣,并研究了如何使用dotliquid。

为了避免输入JSON的POCO能够作为变量发送,我想发送反序列化的JSON。根据我的理解,我们不能发送动态呈现方法,而且JObject或JArray不能像预期的那样工作。我尝试过反序列化为Dictionary< string,object>,但这不能处理嵌套的JSON结构。

液体

代码语言:javascript
复制
[
{%- for p in data.names -%}
{
"name" : {{ p.name }}
} {%- unless forloop.Last == true -%},{% endunless %}         
{%- endfor -%}
]

C#代码

代码语言:javascript
复制
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});

输出

代码语言:javascript
复制
[
  {
    "name" : 
  },         
  {
    "name" :  
  }         
]

我知道Microsoft使用dotliquid实现了类似的特性。https://learn.microsoft.com/en-us/azure/logic-apps/logic-apps-enterprise-integration-liquid-transform

有什么不同的方法?我是否需要将JObject/JArray解析为嵌套字典,或者有哪些替代方案?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-25 15:48:43

您可以使用来自DictionaryConverter和Hash.FromDictionary的Deserialize JSON recursively to IDictionary使其工作。

代码语言:javascript
复制
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);
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50280940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档