You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Stubble.Core模板渲染异常:布尔/数值/字符串区块未显示问题咨询

问题分析与解决方案

背景

技术栈:Microsoft Visual Studio Enterprise 2022(64位)最新版、Stubble.Core 1.10.8、.NET 6.0。
使用Stubble渲染Mustache模板时,仅数组my_list对应的区块正常输出,布尔、整数、字符串对应的区块均未渲染,结果不符合预期。

问题原因

  • should_render(布尔值)区块未渲染:直接传入JObject时,布尔值被包装为JValue对象,Stubble默认仅将非空数组/对象判定为可渲染的真值,无法识别JValue包装的布尔值语义。
  • truthy_value(整数)区块未渲染:JValue包装的整数同样不被Stubble识别为真值,因此跳过该区块渲染。
  • some_string(字符串)区块未渲染:字符串被包装为JValue后,Stubble无法判断其非空状态,导致对应区块不生效。

修改方案

方案1:反序列化为动态类型

修改反序列化代码,将JSON转为dynamic类型,让Stubble能直接识别基础类型:

var objData = JsonConvert.DeserializeObject<dynamic>(jsonData);
var stubble = new StubbleBuilder().Build();
string body = stubble.Render(template.TemplateBody, objData);

方案2:反序列化为强类型实体

定义与JSON结构匹配的实体类:

public class TemplateData
{
    public bool should_render { get; set; }
    public List<string> my_list { get; set; }
    public int truthy_value { get; set; }
    public string some_string { get; set; }
}

再反序列化为该类型:

var objData = JsonConvert.DeserializeObject<TemplateData>(jsonData);
var stubble = new StubbleBuilder().Build();
string body = stubble.Render(template.TemplateBody, objData);

方案3:启用Stubble的JToken支持(推荐)

若必须使用JObject,可通过配置让Stubble正确解析JValue类型:

var stubble = new StubbleBuilder()
    .Configure(settings => settings.AddJTokenSupport())
    .Build();
var objData = (JObject)JsonConvert.DeserializeObject(jsonData);
string body = stubble.Render(template.TemplateBody, objData);

预期输出

修改后,模板渲染将得到如下结果:

If the relevant value in the custom_parameters_json is true then this should be shown!

List seems to work as expected item: a item: b item: c

Truthy values should also work

String should be rendered if it is not null My String

内容的提问来源于stack exchange,提问作者crazyTech

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 00:45:05