我想使用Nustache生成JSON以与特定的Web服务对话。
我不想使用Newtonsoft或类似的东西进行正确的JSON构建,因为此Web服务的规范以带有占位符的文本文件形式出现。我同意这很愚蠢。因此,将它们复制/按摩/粘贴为模板格式很有意义,并希望减少错误。
但是,当然,Nustache并不知道什么使有效JSON。
使用类似的模板
{{1}}
以及需要在JSON中转义的bar值,表示它包含大括号或无害的反斜杠,结果是字符串替换正确的,但无效的JSON。
是否可以告诉Nustache我希望输出为JSON并在替换字符串时让其转义字符串?
还是建议您做一个助手来管理转义并将其放在所有占位符上?
感谢阅读和思考。
答案 0 :(得分:0)
我没有找到一个完全令人满意的答案,但是找到了可行的解决方案。
我的解决方法是Nustache帮助程序,它负责报价和转义。丑陋的是,我需要在每个实例的模板中指定助手:
{ "foo": "{{json bar}}" }
助手实现很简单,可以在此处完整列出。对于实际工作,它从Newtonsoft JSON委托给JsonConvert:
public class JSONHelpers
{
public static void Register()
{
if (!Helpers.Contains("json"))
{
Helpers.Register("json", JSON);
}
}
private static void JSON(RenderContext ctx, IList<object> args, IDictionary<string, object> options,
RenderBlock fn, RenderBlock inverse)
{
object input = args[0];
if (input == null)
{
ctx.Write("null");
}
else
{
string text = input.ToString();
string json = JsonConvert.ToString(text);
ctx.Write(json);
}
}
}
希望这对其他人很有用。