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

C#使用YamlDotNet将YAML转JSON时布尔/整数被转成字符串问题求解

问题原因

默认配置下YamlDotNet的反序列化器不会自动识别无引号标量的原生类型,所有值都会被解析为字符串,序列化到JSON时自然会保留字符串格式,导致布尔、数字等类型不符合预期。

解决方案

方案1:开启自动类型识别(无需定义实体类)

修改ConvertirYamlAJson方法的反序列化器配置,添加自动识别原生类型的配置即可:

public static string ConvertirYamlAJson(TextReader yml)
{
    var deserializer = new DeserializerBuilder()
        // 核心配置:自动尝试将无引号的字符串转换为布尔、数字等对应原生类型
        .WithAttemptingUnquotedStringTypeDeserialization()
        .Build(); 
    var yamlObject = deserializer.Deserialize(yml); 
    var serializer = new SerializerBuilder()
        .JsonCompatible()
        .Build(); 
    return serializer.Serialize(yamlObject);
}

如果自动识别的覆盖度不够,可以手动添加指定类型的转换器:

var deserializer = new DeserializerBuilder()
    .WithTypeConverter(new YamlDotNet.Serialization.Converters.BooleanConverter())
    .WithTypeConverter(new YamlDotNet.Serialization.Converters.Int32Converter())
    .WithTypeConverter(new YamlDotNet.Serialization.Converters.Int64Converter())
    .Build();

方案2:绑定实体类(类型最稳定,推荐)

如果YAML结构固定,提前定义对应结构的实体类,反序列化时指定实体类型,从根源上保证类型正确:

  1. 定义实体结构
public class Contrato
{
    public string CodigoTipoContrato { get; set; }
    public string Descripcion { get; set; }
    public string Empresa { get; set; }
    public List<TipoConcepto> TiposConcepto { get; set; }
}

public class TipoConcepto
{
    public string CodigoTipoConcepto { get; set; }
    public string Descripcion { get; set; }
    public string NaturalezaContable { get; set; }
    public string PerfilContabilizacion { get; set; }
    public string GrupoImpuestosArticulo { get; set; }
    public string CodigoMoneda { get; set; }
    public bool PermiteCruce { get; set; }
}
  1. 修改反序列化逻辑
public static string ConvertirYamlAJson(TextReader yml)
{
    var deserializer = new DeserializerBuilder().Build(); 
    // 反序列化时指定实体类型
    var yamlObject = deserializer.Deserialize<Contrato>(yml); 
    var serializer = new SerializerBuilder().JsonCompatible().Build(); 
    return serializer.Serialize(yamlObject);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:24:03