3

我正在开发一个 REST 模拟服务。我使用 DotLiquid。我想将 POST 正文解析为来自 XML 和 JSON 的对象。

DotLiquid 适用于匿名类型,例如

var input = new
{
    Body = new { Foos = new[] { new{ Bar = "OneBar" }, new { Bar = "TwoBar" } }  }
};

var template = Template.Parse(@"{% for item in Body.Foos %}
{{ item.Bar }}
{% endfor %}");
Console.WriteLine(template.Render(Hash.FromAnonymousObject(input)));
Console.ReadLine();

输出:

一个酒吧

双杠

但是做同样的JObject事情不会输出任何东西

var json = "{ 'Foos': [{ 'Bar': 'OneBar' }, { 'Bar': 'TwoBar' }] }";

var input = new
{
    Body = JObject.Parse(json)
};

var template = Template.Parse(@"{% for item in Body.Foos %}
{{ item.Bar }}
{% endfor %}");
Console.WriteLine(template.Render(Hash.FromAnonymousObject(input)));
Console.ReadLine();
4

1 回答 1

3

看起来 DotLiquid 中没有对 JSON 的直接支持

获取newtonsoft.json库,先反序列化json;像这样的东西

var obj = JsonConvert.DeserializeObject<ExpandoObject>(jsonObject, expConverter);

ExpandoDotLiquidIDictionary支持的实现。或者,做清​​单

var model = JsonConvert.DeserializeObject<List<string>>(json);
于 2019-08-31T01:12:23.187 回答