YamlDotNet在C#中将YAML转换为JSON

t3irkdon  于 2023-03-31  发布在  C#
关注(0)|答案(2)|浏览(262)

我需要帮助,当试图转换yaml到json它是传递所有的属性字符串,它不承认布尔或整数字段。
我正在使用YamldotNet库,在c#中。如果有人能帮助我,我将不胜感激

// 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"
    }
  ]
}
uubf1zoe

uubf1zoe1#

如果没有实体或类,你必须强制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

5sxhfpxr

5sxhfpxr2#

使用此代码可识别所有值类型

// convert string/file to YAML object to JSON
            var r = new StringReader(@"
                scalar: a scalar,
                minimum : 123,
                required : true
                sequence:
                  - one
                  - two
                ");
            var deserializer = new DeserializerBuilder()
                .WithAttemptingUnquotedStringTypeDeserialization()
                .Build();
            var yamlObject = deserializer.Deserialize(r);

            var serializer = new SerializerBuilder()
                .JsonCompatible()
                .Build();

            var json = serializer.Serialize(yamlObject);

相关问题