private void WriteValueRecursive(OpenApiYamlWriter writer, object value) { if (value == null || value.GetType().IsPrimitive || value is decimal || value is string || value is DateTimeOffset || value is DateTime) { writer.WriteValue(value); } else if (value.GetType().IsGenericType&& (typeof(IDictionary <,>).IsAssignableFrom(value.GetType().GetGenericTypeDefinition()) || typeof(Dictionary <,>).IsAssignableFrom(value.GetType().GetGenericTypeDefinition()))) { writer.WriteStartObject(); foreach (var elementValue in (dynamic)(value)) { writer.WritePropertyName(elementValue.Key); WriteValueRecursive(writer, elementValue.Value); } writer.WriteEndObject(); } else if (typeof(IEnumerable).IsAssignableFrom(value.GetType())) { writer.WriteStartArray(); foreach (var elementValue in (IEnumerable)value) { WriteValueRecursive(writer, elementValue); } writer.WriteEndArray(); } }
public void WriteStringWithNewlineCharactersInObjectAsYamlWorks(string input, string expected) { // Arrange var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture); var writer = new OpenApiYamlWriter(outputStringWriter) { UseLiteralStyle = true, }; // Act writer.WriteStartObject(); writer.WritePropertyName("test"); writer.WriteValue(input); writer.WriteEndObject(); var actual = outputStringWriter.GetStringBuilder().ToString() // Normalize newline for cross platform .Replace("\r", ""); // Assert actual.Should().Be(expected); }