YamlDotNet 在 C# 中将 YAML 转换为 JSON

Posted

技术标签:

【中文标题】YamlDotNet 在 C# 中将 YAML 转换为 JSON【英文标题】:YamlDotNet Convert YAML to JSON in C# 【发布时间】:2022-01-02 19:54:54 【问题描述】:

我在尝试将 yaml 转换为 json 时需要帮助,它会将所有属性都传递给字符串,并且无法识别 bool 或 integer 字段。

我在 c# 中使用 YamlDotNet 库。如果有人可以帮助我,我将不胜感激

// convertir string to stream
byte[] ArchivoConvertidobyteArray = Encoding.ASCII.GetBytes(archivoRuta);

var vigenciaYaml = (new StreamReader(new MemoryStream(ArchivoConvertidobyteArray)));
vigenciaJson = ConvertirYamlAJson(vigenciaYaml);

public static string ConvertirYamlAJson(TextReader yml)

    var deserializer = new DeserializerBuilder().Build(); 
    var yamlObject = deserializer.Deserialize(yml); 
    var serializer = new SerializerBuilder().JsonCompatible().Build(); 
    string json = serializer.Serialize(yamlObject); 
    return json;

Yaml 文件

# Definición del contrato
CodigoTipoContrato: BAS2
Descripcion: BASICO DOS
Empresa: DECORÉ
# Definición de conceptos del contrato
TiposConcepto:
- CodigoTipoConcepto: VPAG
  Descripcion: VALOR A PAGAR
  NaturalezaContable: debito
  PerfilContabilizacion: PCGRAL
  GrupoImpuestosArticulo: ''
  CodigoMoneda: COP
  PermiteCruce: true

预期结果


  "CodigoTipoContrato": "BAS2",
  "Descripcion": "BASICO DOS",
  "Empresa": "DECORÉ",
  "TiposConcepto": [
    
      "CodigoTipoConcepto": "VPAG",
      "Descripcion": "VALOR A PAGAR",
      "NaturalezaContable": "debito",
      "PerfilContabilizacion": "PCGRAL",
      "GrupoImpuestosArticulo": "",
      "CodigoMoneda": "COP",
      "PermiteCruce": true
    
  ]

原来是这样的


  "CodigoTipoContrato": "BAS2",
  "Descripcion": "BASICO DOS",
  "Empresa": "DECORÉ",
  "TiposConcepto": [
    
      "CodigoTipoConcepto": "VPAG",
      "Descripcion": "VALOR A PAGAR",
      "NaturalezaContable": "debito",
      "PerfilContabilizacion": "PCGRAL",
      "GrupoImpuestosArticulo": "",
      "CodigoMoneda": "COP",
      "PermiteCruce": "true"
    
  ]

【问题讨论】:

我建议你用文字而不是图片写一个样本,帮助者不要浪费时间为你重新创建样本。显示你的代码将是必须的,类,代码 c#... 早上好,Frenchy 我无法分享代码,因为它显示的错误是通过控制台显示的,发送捕获要容易得多。 什么是您的起始文件 yaml...?在您的示例 json 中是一个字符串,因此要解析您的 json,您需要使用解析器 newtonjson,例如,您必须声明一个类来解析你的 json 字符串 问题已修改。 是的,但是如果我添加一个实体,它会很好地转换它,但如果我删除它,它会将所有内容都转换为字符串 【参考方案1】:

没有实体或类,你必须在yaml中强制值的类型:

# Definición del contrato
CodigoTipoContrato: BAS2
Descripcion: BASICO DOS
Empresa: DECORÉ
# Definición de conceptos del contrato
TiposConcepto:
- CodigoTipoConcepto: VPAG
  Descripcion: VALOR A PAGAR
  NaturalezaContable: debito
  PerfilContabilizacion: PCGRAL
  GrupoImpuestosArticulo: ''
  CodigoMoneda: COP
  PermiteCruce: !!bool true

json 结果:


    "CodigoTipoContrato": "BAS2",
    "Descripcion": "BASICO DOS",
    "Empresa": "DECOR?",
    "TiposConcepto": [
        
            "CodigoTipoConcepto": "VPAG",
            "Descripcion": "VALOR A PAGAR",
            "NaturalezaContable": "debito",
            "PerfilContabilizacion": "PCGRAL",
            "GrupoImpuestosArticulo": "",
            "CodigoMoneda": "COP",
            "PermiteCruce": true
        
    ]

你也有同样的 int 技巧:!!int

【讨论】:

谢谢你,法国人...

以上是关于YamlDotNet 在 C# 中将 YAML 转换为 JSON的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 YamlDotNet 将 JSON 转换为 YAML

YAML 中的单个感叹号有啥作用?

在c#中将html转换为json

如何在 Gatsby 中将多个 yaml 文件映射到 frontmatter

如何在 Java 中将 YAML 转换为 JSON?

如何在 bash 中将 json 响应转换为 yaml