Skip to content

Commit

Permalink
Fix anchor with arrays (#97)
Browse files Browse the repository at this point in the history
  • Loading branch information
xoofx committed May 8, 2022
1 parent c4ddfc0 commit dcd5e74
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 2 deletions.
36 changes: 36 additions & 0 deletions src/SharpYaml.Tests/Serialization/SerializationTests2.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1573,6 +1573,42 @@ public class ClassToIgnoreNulls
public int? Nullable { get; set; }
}

[Test]
public void AnchorWithArrays()
{
var array = new int[] { 1, 2 };
var expected = new OuterClass()
{
InnerObjects = new List<InnerClass>()
};
for (int i = 0; i < 2; i++)
{
var inner = new InnerClass
{
Array = array
};
expected.InnerObjects.Add(inner);
}

var settings = new SerializerSettings() { EmitDefaultValues = true, EmitAlias = true };
settings.RegisterAssembly(typeof(OuterClass).Assembly);
var serializer = new Serializer(settings);

string serialString = serializer.Serialize(expected);
var actual = serializer.Deserialize(serialString) as OuterClass;
Assert.NotNull(actual);
Assert.True(ReferenceEquals(actual.InnerObjects[0].Array, actual.InnerObjects[1].Array));
}

public class OuterClass
{
public List<InnerClass> InnerObjects { get; set; }
}
public class InnerClass
{
public int[] Array { get; set; }
}

private void SerialRoundTrip(SerializerSettings settings, string text, Type serializedType = null)
{
var serializer = new Serializer(settings);
Expand Down
1 change: 1 addition & 0 deletions src/SharpYaml/Serialization/Serializers/ArraySerializer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ public void WriteYaml(ref ObjectContext objectContext)
// Emit a Flow sequence or block sequence depending on settings
objectContext.Writer.Emit(new SequenceStartEventInfo(value, valueType)
{
Anchor = objectContext.Anchor,
Tag = objectContext.Tag,
Style = objectContext.Style != YamlStyle.Any ? objectContext.Style : (arrayList.Count < objectContext.Settings.LimitPrimitiveFlowSequence ? YamlStyle.Flow : YamlStyle.Block)
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ protected override void WriteMembers(ref ObjectContext objectContext)

WriteMemberName(ref objectContext, null, objectContext.Settings.SpecialCollectionMember);

objectContext.Writer.Emit(new SequenceStartEventInfo(objectContext.Instance, objectContext.Instance.GetType()) {Style = objectContext.Style});
objectContext.Writer.Emit(new SequenceStartEventInfo(objectContext.Instance, objectContext.Instance.GetType()) {Anchor = objectContext.Anchor, Style = objectContext.Style});
WriteCollectionItems(ref objectContext);
objectContext.Writer.Emit(new SequenceEndEventInfo(objectContext.Instance, objectContext.Instance.GetType()));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ protected override void WriteMembers(ref ObjectContext objectContext)

WriteMemberName(ref objectContext, null, objectContext.Settings.SpecialCollectionMember);

objectContext.Writer.Emit(new MappingStartEventInfo(objectContext.Instance, objectContext.Instance.GetType()) {Style = objectContext.Style});
objectContext.Writer.Emit(new MappingStartEventInfo(objectContext.Instance, objectContext.Instance.GetType()) { Anchor = objectContext.Anchor, Style = objectContext.Style});
WriteDictionaryItems(ref objectContext);
objectContext.Writer.Emit(new MappingEndEventInfo(objectContext.Instance, objectContext.Instance.GetType()));
}
Expand Down

0 comments on commit dcd5e74

Please sign in to comment.