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
相关产品推荐
相关产品推荐

