JObject и DotLiquid

Я работаю над фиктивным сервисом REST. Я использую ДотЛиквид. Я хочу разобрать тело 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();

person Anders    schedule 07.08.2019    source источник


Ответы (1)


Похоже, в DotLiquid нет прямой поддержки JSON.

Получите библиотеку newtonsoft.json и сначала десериализуйте json; что-то вроде этого

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

Expando реализует IDictionary поддержку DotLiquid. Или сделайте список

var model = JsonConvert.DeserializeObject<List<string>>(json);
person T.S.    schedule 31.08.2019
comment
Каким может быть expConverter? - person Rafael Simonelli; 22.11.2019
comment
@RafaelSimonelli см. документацию newtonsoft.com/json/help/html/ - person T.S.; 22.11.2019