Dotliquid JSON 使用 JSON.net 进行转换
Dotliquid JSON Transformation using JSON.net
我有兴趣执行 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 解析为嵌套字典,或者有哪些替代方法?
您可以使用 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);
我有兴趣执行 JSON 转换并研究了使用 dotliquid。
为了避免输入 JSON 的 POCO 只是为了能够将其作为变量发送,我想发送反序列化的 JSON。据我了解,我们无法将动态发送到渲染方法,并且 JObject 或 JArray 无法按预期工作。我尝试反序列化为 Dictionary
液体
[
{%- 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 解析为嵌套字典,或者有哪些替代方法?
您可以使用 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);