JObject 和 DotLiquid

JObject and DotLiquid

我正在开发 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();

输出:

OneBar

TwoBar

但是对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();

在 DotLiquid

中似乎没有对 JSON 的直接支持

先获取newtonsoft.json库并反序列化json;像这样

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

Expando 实现了 DotLiquid 支持的 IDictionary。或者,执行列表

var model = JsonConvert.DeserializeObject<List<string>>(json);