diff --git a/src/Microsoft.OpenApi.YamlReader/YamlConverter.cs b/src/Microsoft.OpenApi.YamlReader/YamlConverter.cs index 710f20c6b..1cafea77b 100644 --- a/src/Microsoft.OpenApi.YamlReader/YamlConverter.cs +++ b/src/Microsoft.OpenApi.YamlReader/YamlConverter.cs @@ -140,9 +140,10 @@ ScalarStyle.Plain when YamlNullRepresentations.Contains(yaml.Value) => (JsonValu } private static bool NeedsQuoting(string value) => + string.IsNullOrEmpty(value) || decimal.TryParse(value, NumberStyles.Float, CultureInfo.InvariantCulture, out _) || - bool.TryParse(value, out _) || - YamlNullRepresentations.Contains(value); + bool.TryParse(value, out _) || + YamlNullRepresentations.Contains(value); private static YamlScalarNode ToYamlScalar(this JsonValue val) { diff --git a/test/Microsoft.OpenApi.Readers.Tests/YamlConverterTests.cs b/test/Microsoft.OpenApi.Readers.Tests/YamlConverterTests.cs index b2f0e0f5d..c246e0898 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/YamlConverterTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/YamlConverterTests.cs @@ -315,6 +315,23 @@ public void ItDoesNotSerializeTheSentinelValue() var scalarNode = Assert.IsType(yamlValue); Assert.Equal("null", scalarNode.Value, StringComparer.OrdinalIgnoreCase); } + [Fact] + public void RoundTripEmptyStringsValues() + { + // Given + var yamlInput = + """ + emptyString: "" + """; + + // When + var jsonNode = ConvertYamlStringToJsonNode(yamlInput); + var convertedBack = jsonNode.ToYamlNode(); + var convertedBackOutput = ConvertYamlNodeToString(convertedBack); + + // Then + Assert.Equal(yamlInput.MakeLineBreaksEnvironmentNeutral(), convertedBackOutput.MakeLineBreaksEnvironmentNeutral()); + } private static JsonNode ConvertYamlStringToJsonNode(string yamlInput) {