我正在研究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);

关于c# - JObject和DotLiquid,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57398039/

10-13 05:43