From e9019d5f224f266e88d9882502f83f0c6865ec24 Mon Sep 17 00:00:00 2001 From: Antoine Aubry Date: Sat, 25 May 2013 22:08:10 +0100 Subject: [PATCH] Fix bug when serializing lists with nulls inside. --- .../DefaultExclusiveObjectGraphVisitor.cs | 3 +- .../RepresentationModel/SerializationTests.cs | 31 +++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/YamlDotNet.RepresentationModel/Serialization/DefaultExclusiveObjectGraphVisitor.cs b/YamlDotNet.RepresentationModel/Serialization/DefaultExclusiveObjectGraphVisitor.cs index 68fda902c..f640578c2 100644 --- a/YamlDotNet.RepresentationModel/Serialization/DefaultExclusiveObjectGraphVisitor.cs +++ b/YamlDotNet.RepresentationModel/Serialization/DefaultExclusiveObjectGraphVisitor.cs @@ -21,8 +21,7 @@ private static object GetDefault(Type type) public override bool Enter(object value, Type type) { - return !_objectComparer.Equals(value, GetDefault(type)) - && base.Enter(value, type); + return base.Enter(value, type); } public override bool EnterMapping(object key, Type keyType, object value, Type valueType) diff --git a/YamlDotNet.UnitTests/RepresentationModel/SerializationTests.cs b/YamlDotNet.UnitTests/RepresentationModel/SerializationTests.cs index 29a81d7ba..72967f056 100644 --- a/YamlDotNet.UnitTests/RepresentationModel/SerializationTests.cs +++ b/YamlDotNet.UnitTests/RepresentationModel/SerializationTests.cs @@ -22,6 +22,7 @@ using System; using System.Drawing; using System.Linq; +using System.Text.RegularExpressions; using Xunit; using System.IO; using YamlDotNet.Core; @@ -961,5 +962,35 @@ public void DefaultValueAttributeIsIgnoredWhenValueIsDifferent() Assert.True(serialized.Contains("Value")); } + + [Fact] + public void NullValuesInListsAreAlwaysEmittedWithoutEmitDefaults() + { + var input = new string[] { "foo", null, "bar" }; + + var serializer = new Serializer(); + var writer = new StringWriter(); + serializer.Serialize(writer, input); + var serialized = writer.ToString(); + + Console.WriteLine(serialized); + + Assert.Equal(3, Regex.Matches(serialized, "-").Count); + } + + [Fact] + public void NullValuesInListsAreAlwaysEmittedWithEmitDefaults() + { + var input = new string[] { "foo", null, "bar" }; + + var serializer = new Serializer(); + var writer = new StringWriter(); + serializer.Serialize(writer, input, SerializationOptions.EmitDefaults); + var serialized = writer.ToString(); + + Console.WriteLine(serialized); + + Assert.Equal(3, Regex.Matches(serialized, "-").Count); + } } }