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