DotLiquid Ha sh .FromAnonymousObject с десериализованным JSon объектом - PullRequest
0 голосов
/ 15 марта 2020

Я хочу использовать DotLiquid для создания HTML в моем ASP Net Core 2.2 Project

Мой источник данных происходит из строки JSon, которая передается методу.

После десериализации строки с помощью DeserializeObject я получаю ошибку в методе Ha sh .FromAnonymousObject

Это работает:

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)' Имя параметра: свойство

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

1 Ответ

0 голосов
/ 21 марта 2020

DotLiquid имеет альтернативный генератор Ha sh из словаря. Я смог решить эту проблему с помощью сложных json структур, используя это, выполнив следующие действия:

включает следующее:

using Newtonsoft.Json;
using Newtonsoft.Json.Converters;

затем (для краткости json простой ниже, но работает для сложных структур, с нетривиальными жидкими шаблонами)

    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));
...