Language syntax documentation: https://shopify.github.io/liquid/
// Create a Hash, containing all data usable by the template var json = JsonConvert.SerializeObject(model); var dictionary = JsonConvert.DeserializeObject<Dictionary<string, object>>(json, new DictionaryConverter()); var hash = Hash.FromDictionary(dictionary); var template = Template.Parse(TemplateString); // Parses and compiles the template var content = template.Render(hash); // Executes the variable replacement in the template
using Newtonsoft.Json;
public class DictionaryConverter : JsonConverter
{
public override bool CanWrite => false;
public override bool CanConvert(Type objectType) => typeof(IDictionary<string, object>).IsAssignableFrom(objectType);
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) => ReadValue(reader);
private object ReadValue(JsonReader reader)
{
while (reader.TokenType == JsonToken.Comment)
{
if (!reader.Read()) throw new JsonSerializationException("Unexpected Token when converting IDictionary<string, object>");
}
switch (reader.TokenType)
{
case JsonToken.StartObject:
return ReadObject(reader);
case JsonToken.StartArray:
return this.ReadArray(reader);
case JsonToken.Integer:
case JsonToken.Float:
case JsonToken.String:
case JsonToken.Boolean:
case JsonToken.Undefined:
case JsonToken.Null:
case JsonToken.Date:
case JsonToken.Bytes:
return reader.Value;
default:
throw new JsonSerializationException
(string.Format("Unexpected token when converting IDictionary<string, object>: {0}", reader.TokenType));
}
}
private object ReadArray(JsonReader reader)
{
IList<object> list = new List<object>();
while (reader.Read())
{
switch (reader.TokenType)
{
case JsonToken.Comment:
break;
default:
var v = ReadValue(reader);
list.Add(v);
break;
case JsonToken.EndArray:
return list;
}
}
throw new JsonSerializationException("Unexpected end when reading IDictionary<string, object>");
}
private object ReadObject(JsonReader reader)
{
var obj = new Dictionary<string, object>();
while (reader.Read())
{
switch (reader.TokenType)
{
case JsonToken.PropertyName:
var propertyName = reader.Value.ToString();
if (!reader.Read())
{
throw new JsonSerializationException("Unexpected end when reading IDictionary<string, object>");
}
var v = ReadValue(reader);
obj[propertyName] = v;
break;
case JsonToken.Comment:
break;
case JsonToken.EndObject:
return obj;
}
}
throw new JsonSerializationException("Unexpected end when reading IDictionary<string, object>");
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using Domain.Models;
namespace {{ Namespace }}
{
public class Dm{{ Name }}
{
{% for p in Properties -%}
public {{ p.DataType }} {{ p.Name }} { get; set; }
{% endfor -%}
internal static Dm{{Name}} FromDomain({{Name}} src)
{
if (src == null) return null;
return new Dm{{Name}} {
{% for p in Properties -%}
{{ p.Name }} = src.{{ p.Name }}{% if forloop.index != Properties.size %},{% endif -%}
{% endfor -%}
};
}
internal static {{Name}} ToDomain(Dm{{Name}} src)
{
if (src == null) return null;
return new {{Name}} {
{% for p in Properties -%}
{{ p.Name }} = src.{{ p.Name }}{% if forloop.index != Properties.size %},{% endif -%}
{% endfor -%}
};
}
}
}
473100cookie-checkC# Dotliquid string templates