首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有反序列化DotLiquid对象的Hash.FromAnonymousObject

带有反序列化DotLiquid对象的Hash.FromAnonymousObject
EN

Stack Overflow用户
提问于 2020-03-15 09:12:32
回答 1查看 1.2K关注 0票数 2

我想使用DotLiquid在我的ASP.NETCore2.2项目中创建HTML

我的数据源来自传递给该方法的JSon字符串。

使用DeserializeObject反序列化字符串后,Hash.FromAnonymousObject方法中会出现一个错误

这样做是可行的:

代码语言:javascript
复制
var stuff1 = new
{
    Name = "John",
    Surname = "Smith",
    Addresses = new[] {
        new { City = "New York", State = "NY"},
        new { City = "Milano", State = "IT" }
    }
};
var hash1 = DotLiquid.Hash.FromAnonymousObject(stuff1);

这给出了错误,为调用方法'Newtonsoft.Json.Linq.JToken get_Item(System.Object)参数名称: property提供了不正确的参数数

代码语言:javascript
复制
dynamic stuff2 = JsonConvert.DeserializeObject("{
'Name': 'John', 'Surname': 'Smith',
'Addresses': [
    { 'City': 'New York', 'State': 'NY' },
    { 'City': 'Milano', 'State': 'IT' }
]}");
var hash2 = DotLiquid.Hash.FromAnonymousObject(stuff2);
EN

回答 1

Stack Overflow用户

发布于 2020-03-21 14:34:19

DotLiquid有字典中的另一种哈希生成器。我能够用复杂的json结构来解决这个问题,通过执行以下操作来利用它:

包括以下内容:

代码语言:javascript
复制
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;

然后(为了简洁起见,json在下面很简单,但是适用于复杂的结构,具有非平凡的液体模板)

代码语言:javascript
复制
    string template = "<h4>hello {{name}}</h4>";
    string json = "{ \"name\" : \"john doe\"}";
    dynamic expandoObj = JsonConvert.DeserializeObject<ExpandoObject>(json, new ExpandoObjectConverter());
IDictionary<string, object> expandoDict = new Dictionary<string, object>(expandoObj);

var liquidTemplate = DotLiquid.Template.Parse(template);
var result = liquidTemplate.Render(Hash.FromDictionary(expandoDict));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60691326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档