【问题标题】:Dotliquid JSON Transformation using JSON.net使用 JSON.net 进行 Dotliquid JSON 转换
【发布时间】:2018-05-10 20:20:15
【问题描述】:

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

为了避免输入 JSON 的 POCO 只是为了能够将其作为变量发送,我想发送反序列化的 JSON。据我了解,我们无法将动态发送到渲染方法,并且 JObject 或 JArray 无法按预期工作。我尝试反序列化到 Dictionary,但无法处理嵌套的 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://docs.microsoft.com/en-us/azure/logic-apps/logic-apps-enterprise-integration-liquid-transform

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

【问题讨论】:

  • 嗨 Frederik,我在同一个问题上 A.T.M.尝试了逻辑应用程序,使用该集成帐户太贵了。我尝试了几个库,DotLiquid,Liquid.NET,我仍在研究如何将 json 字符串转换为液体散列,以另一种 json 格式呈现我的数据。我会及时通知你我的发现......或者你已经有了解决方案?
  • 嗨,我使用了 dictionary 解决方案,类似于接受的答案中的建议。类似于该问题的第二个答案。不过,很好奇他们是如何在 Logic Apps 中实现它的,因为他们使用的是 dotliquid

标签: json json.net dotliquid


【解决方案1】:

您可以使用来自 Deserialize JSON recursively to IDictionary<string,object> 和 Hash.FromDictionary 的 DictionaryConverter 来让它工作

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);

【讨论】:

  • 使用相同的。我找不到 DictionaryConverter 类。当我解析时也是如此。我得到空白数组
  • @MaulikModi 你在引用的链接中有DictionaryConverter
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-31
  • 1970-01-01
  • 2016-06-02
  • 2016-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多