Skip to content

Commit 1055eb7

Browse files
authored
Merge pull request #1003 from ChristopherMann/yaml-converter-override
Support YamlConverterAttribute in attribute overrides +semver:feature
2 parents 7923dd8 + 2eb9023 commit 1055eb7

File tree

2 files changed

+46
-1
lines changed

2 files changed

+46
-1
lines changed

YamlDotNet.Test/Serialization/TypeConverterAttributeTests.cs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,45 @@ namespace YamlDotNet.Test.Serialization
2929
{
3030
public class TypeConverterAttributeTests
3131
{
32+
[Fact]
33+
public void TestConverterInAttributeOverride_Deserializes()
34+
{
35+
var deserializer = new DeserializerBuilder()
36+
.WithAttributeOverride<OuterClassWithoutAttribute>(
37+
c => c.Value,
38+
new YamlConverterAttribute(typeof(AttributedTypeConverter)))
39+
.WithTypeConverter(new AttributedTypeConverter())
40+
.Build();
41+
var yaml = @"Value:
42+
abc: def";
43+
var actual = deserializer.Deserialize<OuterClassWithoutAttribute>(yaml);
44+
Assert.Equal("abc", actual.Value.Key);
45+
Assert.Equal("def", actual.Value.Value);
46+
}
47+
48+
[Fact]
49+
public void TestConverterInAttributeOverride_Serializes()
50+
{
51+
var serializer = new SerializerBuilder()
52+
.WithAttributeOverride<OuterClassWithoutAttribute>(
53+
c => c.Value,
54+
new YamlConverterAttribute(typeof(AttributedTypeConverter)))
55+
.WithTypeConverter(new AttributedTypeConverter())
56+
.Build();
57+
var o = new OuterClassWithoutAttribute
58+
{
59+
Value = new ValueClass
60+
{
61+
Key = "abc",
62+
Value = "def"
63+
}
64+
};
65+
var actual = serializer.Serialize(o).NormalizeNewLines().TrimNewLines();
66+
var expected = @"Value:
67+
abc: def".NormalizeNewLines().TrimNewLines();
68+
Assert.Equal(expected, actual);
69+
}
70+
3271
[Fact]
3372
public void TestConverterOnAttribute_Deserializes()
3473
{
@@ -94,6 +133,11 @@ public class OuterClass
94133
public ValueClass Value { get; set; }
95134
}
96135

136+
public class OuterClassWithoutAttribute
137+
{
138+
public ValueClass Value { get; set; }
139+
}
140+
97141
public class ValueClass
98142
{
99143
public string Key { get; set; }

YamlDotNet/Serialization/YamlAttributeOverridesInspector.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,8 @@ public Type? TypeOverride
8181
set { baseDescriptor.TypeOverride = value; }
8282
}
8383

84-
public Type? ConverterType => baseDescriptor.ConverterType;
84+
public Type? ConverterType =>
85+
GetCustomAttribute<YamlConverterAttribute>()?.ConverterType ?? baseDescriptor.ConverterType;
8586

8687
public int Order
8788
{

0 commit comments

Comments
 (0)