Skip to content

Commit a3e98e8

Browse files
committed
replace YamlMember and YamlIgnore attributes with JsonPropertyName and JsonIgnore from System.Text.Json
1 parent c9de783 commit a3e98e8

File tree

13 files changed

+82
-65
lines changed

13 files changed

+82
-65
lines changed

src/Directory.Build.props

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,12 @@
2727
<Nullable>enable</Nullable>
2828
<SatelliteResourceLanguages>en</SatelliteResourceLanguages>
2929

30-
<EnableNETAnalyzers>True</EnableNETAnalyzers>
30+
<EnableNETAnalyzers>true</EnableNETAnalyzers>
3131
<AnalysisLevel>latest</AnalysisLevel>
32-
<EnforceCodeStyleInBuild>True</EnforceCodeStyleInBuild>
32+
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
3333

3434
<IsUnitTestProject>false</IsUnitTestProject>
35-
<IsUnitTestProject Condition="$(MSBuildProjectName.EndsWith('.Tests')) or $(MSBuildProjectName.EndsWith('.Testing'))">True</IsUnitTestProject>
35+
<IsUnitTestProject Condition="$(MSBuildProjectName.EndsWith('.Tests')) or $(MSBuildProjectName.EndsWith('.Testing'))">true</IsUnitTestProject>
3636
</PropertyGroup>
3737

3838
<PropertyGroup Condition="'$(GITHUB_ACTIONS)' == 'true'">
@@ -82,6 +82,8 @@
8282
<Using Include="System.Diagnostics"/>
8383
<Using Include="System.Reflection"/>
8484
<Using Include="System.Text"/>
85+
<Using Include="System.Text.Json"/>
86+
<Using Include="System.Text.Json.Serialization"/>
8587
<Using Include="System.Xml"/>
8688
</ItemGroup>
8789

src/GitVersion.App/OverrideConfigurationOptionParser.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using GitVersion.Configuration;
2-
using YamlDotNet.Serialization;
32

43
namespace GitVersion;
54

@@ -18,17 +17,17 @@ internal class OverrideConfigurationOptionParser
1817
/// </summary>
1918
/// <returns></returns>
2019
/// <remarks>
21-
/// Lookup keys are created from <see cref="YamlDotNet.Serialization.YamlMemberAttribute"/> to match 'GitVersion.yml'
20+
/// Lookup keys are created from <see cref="System.Text.Json.Serialization.JsonPropertyNameAttribute"/> to match 'GitVersion.yml'
2221
/// options as close as possible.
2322
/// </remarks>
2423
private static ILookup<string?, PropertyInfo> GetSupportedProperties() => typeof(GitVersionConfiguration).GetProperties(BindingFlags.Public | BindingFlags.Instance)
2524
.Where(
2625
pi => IsSupportedPropertyType(pi.PropertyType)
2726
&& pi.CanWrite
28-
&& pi.GetCustomAttributes(typeof(YamlMemberAttribute), false).Length > 0
27+
&& pi.GetCustomAttributes(typeof(JsonPropertyNameAttribute), false).Length > 0
2928
)
3029
.ToLookup(
31-
pi => (pi.GetCustomAttributes(typeof(YamlMemberAttribute), false)[0] as YamlMemberAttribute)?.Alias,
30+
pi => (pi.GetCustomAttributes(typeof(JsonPropertyNameAttribute), false)[0] as JsonPropertyNameAttribute)?.Name,
3231
pi => pi
3332
);
3433

src/GitVersion.BuildAgents/Agents/AppVeyor.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
using System.Text.Json;
21
using GitVersion.Extensions;
32
using GitVersion.Logging;
43
using GitVersion.OutputVariables;

src/GitVersion.Core.Tests/Configuration/ConfigurationProviderTests.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
using GitVersion.Logging;
77
using Microsoft.Extensions.DependencyInjection;
88
using Microsoft.Extensions.Options;
9-
using YamlDotNet.Serialization;
109

1110
namespace GitVersion.Core.Tests;
1211

@@ -255,8 +254,8 @@ public void VerifyAliases()
255254
var configuration = typeof(GitVersionConfiguration);
256255
var propertiesMissingAlias = configuration.GetProperties()
257256
.Where(p => p.GetCustomAttribute<ObsoleteAttribute>() == null)
258-
.Where(p => p.GetCustomAttribute<YamlIgnoreAttribute>() == null)
259-
.Where(p => p.GetCustomAttribute(typeof(YamlMemberAttribute)) == null)
257+
.Where(p => p.GetCustomAttribute<JsonIgnoreAttribute>() == null)
258+
.Where(p => p.GetCustomAttribute<JsonPropertyNameAttribute>() == null)
260259
.Select(p => p.Name);
261260

262261
propertiesMissingAlias.ShouldBeEmpty();

src/GitVersion.Core.Tests/DocumentationTests.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
using GitVersion.Core.Tests.Helpers;
33
using GitVersion.Helpers;
44
using GitVersion.OutputVariables;
5-
using YamlDotNet.Serialization;
65

76
namespace GitVersion.Core.Tests;
87

@@ -23,9 +22,9 @@ public void ConfigurationDocumentationIsUpToDate()
2322
var configProperties = typeof(GitVersionConfiguration)
2423
.GetProperties(bindingFlags)
2524
.Union(typeof(BranchConfiguration).GetProperties(bindingFlags))
26-
.Select(p => p.GetCustomAttribute<YamlMemberAttribute>())
25+
.Select(p => p.GetCustomAttribute<JsonPropertyNameAttribute>())
2726
.Where(a => a != null)
28-
.Select(a => a?.Alias)
27+
.Select(a => a?.Name)
2928
.ToList();
3029

3130
configProperties.ShouldNotBeEmpty();

src/GitVersion.Core/Configuration/BranchConfiguration.cs

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using GitVersion.VersionCalculation;
2-
using YamlDotNet.Serialization;
32

43
namespace GitVersion.Configuration;
54

@@ -29,58 +28,58 @@ public BranchConfiguration(BranchConfiguration branchConfiguration)
2928
PreReleaseWeight = branchConfiguration.PreReleaseWeight;
3029
}
3130

32-
[YamlMember(Alias = "mode")]
31+
[JsonPropertyName("mode")]
3332
public VersioningMode? VersioningMode { get; set; }
3433

3534
/// <summary>
3635
/// Special value 'useBranchName' will extract the tag from the branch name
3736
/// </summary>
38-
[YamlMember(Alias = "label")]
37+
[JsonPropertyName("label")]
3938
public string? Label { get; set; }
4039

41-
[YamlMember(Alias = "increment")]
40+
[JsonPropertyName("increment")]
4241
public IncrementStrategy? Increment { get; set; }
4342

44-
[YamlMember(Alias = "prevent-increment-of-merged-branch-version")]
43+
[JsonPropertyName("prevent-increment-of-merged-branch-version")]
4544
public bool? PreventIncrementOfMergedBranchVersion { get; set; }
4645

47-
[YamlMember(Alias = "label-number-pattern")]
46+
[JsonPropertyName("label-number-pattern")]
4847
public string? LabelNumberPattern { get; set; }
4948

50-
[YamlMember(Alias = "track-merge-target")]
49+
[JsonPropertyName("track-merge-target")]
5150
public bool? TrackMergeTarget { get; set; }
5251

53-
[YamlMember(Alias = "track-merge-message")]
52+
[JsonPropertyName("track-merge-message")]
5453
public bool? TrackMergeMessage { get; set; }
5554

56-
[YamlMember(Alias = "commit-message-incrementing")]
55+
[JsonPropertyName("commit-message-incrementing")]
5756
public CommitMessageIncrementMode? CommitMessageIncrementing { get; set; }
5857

59-
[YamlMember(Alias = "regex")]
58+
[JsonPropertyName("regex")]
6059
public string? Regex { get; set; }
6160

62-
[YamlMember(Alias = "source-branches")]
61+
[JsonPropertyName("source-branches")]
6362
public HashSet<string>? SourceBranches { get; set; }
6463

65-
[YamlMember(Alias = "is-source-branch-for")]
64+
[JsonPropertyName("is-source-branch-for")]
6665
public HashSet<string>? IsSourceBranchFor { get; set; }
6766

68-
[YamlMember(Alias = "tracks-release-branches")]
67+
[JsonPropertyName("tracks-release-branches")]
6968
public bool? TracksReleaseBranches { get; set; }
7069

71-
[YamlMember(Alias = "is-release-branch")]
70+
[JsonPropertyName("is-release-branch")]
7271
public bool? IsReleaseBranch { get; set; }
7372

74-
[YamlMember(Alias = "is-mainline")]
73+
[JsonPropertyName("is-mainline")]
7574
public bool? IsMainline { get; set; }
7675

77-
[YamlMember(Alias = "pre-release-weight")]
76+
[JsonPropertyName("pre-release-weight")]
7877
public int? PreReleaseWeight { get; set; }
7978

8079
/// <summary>
8180
/// The name given to this configuration in the configuration file.
8281
/// </summary>
83-
[YamlIgnore]
82+
[JsonIgnore]
8483
public string Name { get; set; }
8584

8685
public BranchConfiguration Inherit(BranchConfiguration? parentConfig)
Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,27 @@
11
using YamlDotNet.Serialization;
22
using YamlDotNet.Serialization.NamingConventions;
3+
using YamlDotNet.Serialization.TypeInspectors;
34

45
namespace GitVersion.Configuration;
56

67
public static class ConfigurationSerializer
78
{
8-
private static IDeserializer Deserializer
9-
=> new DeserializerBuilder().WithNamingConvention(HyphenatedNamingConvention.Instance).Build();
9+
private static IDeserializer Deserializer => new DeserializerBuilder()
10+
.WithNamingConvention(HyphenatedNamingConvention.Instance)
11+
.WithTypeInspector(inspector => new JsonPropertyNameInspector(inspector))
12+
.Build();
13+
1014

1115
public static T Deserialize<T>(string input) => Deserializer.Deserialize<T>(input);
1216

1317
public static string Serialize(object graph) => Serializer.Serialize(graph);
1418

15-
private static ISerializer Serializer
16-
=> new SerializerBuilder().ConfigureDefaultValuesHandling(DefaultValuesHandling.OmitNull)
19+
private static ISerializer Serializer => new SerializerBuilder()
20+
.ConfigureDefaultValuesHandling(DefaultValuesHandling.OmitNull)
21+
.WithTypeInspector(inspector => new JsonPropertyNameInspector(inspector))
1722
.WithNamingConvention(HyphenatedNamingConvention.Instance).Build();
1823

24+
1925
public static GitVersionConfiguration Read(TextReader reader)
2026
{
2127
var configuration = Deserializer.Deserialize<GitVersionConfiguration?>(reader);
@@ -25,3 +31,26 @@ public static GitVersionConfiguration Read(TextReader reader)
2531
public static void Write(GitVersionConfiguration configuration, TextWriter writer)
2632
=> Serializer.Serialize(writer, configuration);
2733
}
34+
35+
internal sealed class JsonPropertyNameInspector : TypeInspectorSkeleton
36+
{
37+
private readonly ITypeInspector innerTypeDescriptor;
38+
39+
public JsonPropertyNameInspector(ITypeInspector innerTypeDescriptor) => this.innerTypeDescriptor = innerTypeDescriptor;
40+
41+
public override IEnumerable<IPropertyDescriptor> GetProperties(Type type, object? container) =>
42+
innerTypeDescriptor.GetProperties(type, container)
43+
.Where(p => p.GetCustomAttribute<JsonIgnoreAttribute>() == null)
44+
.Select(p =>
45+
{
46+
var descriptor = new PropertyDescriptor(p);
47+
var member = p.GetCustomAttribute<JsonPropertyNameAttribute>();
48+
if (member is { Name: { } })
49+
{
50+
descriptor.Name = member.Name;
51+
}
52+
53+
return (IPropertyDescriptor)descriptor;
54+
})
55+
.OrderBy(p => p.Order);
56+
}

src/GitVersion.Core/Configuration/GitVersionConfiguration.cs

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using System.Globalization;
22
using GitVersion.Extensions;
3-
using YamlDotNet.Serialization;
43

54
namespace GitVersion.Configuration;
65

@@ -14,25 +13,25 @@ public GitVersionConfiguration()
1413
Ignore = new IgnoreConfiguration();
1514
}
1615

17-
[YamlMember(Alias = "assembly-versioning-scheme")]
16+
[JsonPropertyName("assembly-versioning-scheme")]
1817
public AssemblyVersioningScheme? AssemblyVersioningScheme { get; set; }
1918

20-
[YamlMember(Alias = "assembly-file-versioning-scheme")]
19+
[JsonPropertyName("assembly-file-versioning-scheme")]
2120
public AssemblyFileVersioningScheme? AssemblyFileVersioningScheme { get; set; }
2221

23-
[YamlMember(Alias = "assembly-informational-format")]
22+
[JsonPropertyName("assembly-informational-format")]
2423
public string? AssemblyInformationalFormat { get; set; }
2524

26-
[YamlMember(Alias = "assembly-versioning-format")]
25+
[JsonPropertyName("assembly-versioning-format")]
2726
public string? AssemblyVersioningFormat { get; set; }
2827

29-
[YamlMember(Alias = "assembly-file-versioning-format")]
28+
[JsonPropertyName("assembly-file-versioning-format")]
3029
public string? AssemblyFileVersioningFormat { get; set; }
3130

32-
[YamlMember(Alias = "label-prefix")]
31+
[JsonPropertyName("label-prefix")]
3332
public string? LabelPrefix { get; set; }
3433

35-
[YamlMember(Alias = "next-version")]
34+
[JsonPropertyName("next-version")]
3635
public string? NextVersion
3736
{
3837
get => nextVersion;
@@ -42,37 +41,37 @@ public string? NextVersion
4241
: value;
4342
}
4443

45-
[YamlMember(Alias = "major-version-bump-message")]
44+
[JsonPropertyName("major-version-bump-message")]
4645
public string? MajorVersionBumpMessage { get; set; }
4746

48-
[YamlMember(Alias = "minor-version-bump-message")]
47+
[JsonPropertyName("minor-version-bump-message")]
4948
public string? MinorVersionBumpMessage { get; set; }
5049

51-
[YamlMember(Alias = "patch-version-bump-message")]
50+
[JsonPropertyName("patch-version-bump-message")]
5251
public string? PatchVersionBumpMessage { get; set; }
5352

54-
[YamlMember(Alias = "no-bump-message")]
53+
[JsonPropertyName("no-bump-message")]
5554
public string? NoBumpMessage { get; set; }
5655

57-
[YamlMember(Alias = "label-pre-release-weight")]
56+
[JsonPropertyName("label-pre-release-weight")]
5857
public int? LabelPreReleaseWeight { get; set; }
5958

60-
[YamlMember(Alias = "commit-date-format")]
59+
[JsonPropertyName("commit-date-format")]
6160
public string? CommitDateFormat { get; set; }
6261

63-
[YamlMember(Alias = "merge-message-formats")]
62+
[JsonPropertyName("merge-message-formats")]
6463
public Dictionary<string, string> MergeMessageFormats { get; set; } = new();
6564

66-
[YamlMember(Alias = "update-build-number")]
65+
[JsonPropertyName("update-build-number")]
6766
public bool UpdateBuildNumber { get; set; } = true;
6867

69-
[YamlMember(Alias = "semantic-version-format")]
68+
[JsonPropertyName("semantic-version-format")]
7069
public SemanticVersionFormat SemanticVersionFormat { get; set; }
7170

72-
[YamlMember(Alias = "branches")]
71+
[JsonPropertyName("branches")]
7372
public Dictionary<string, BranchConfiguration> Branches { get; set; }
7473

75-
[YamlMember(Alias = "ignore")]
74+
[JsonPropertyName("ignore")]
7675
public IgnoreConfiguration Ignore { get; set; }
7776

7877
public override string ToString()

src/GitVersion.Core/Configuration/IgnoreConfiguration.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
11
using GitVersion.VersionCalculation;
2-
using YamlDotNet.Serialization;
32

43
namespace GitVersion.Configuration;
54

65
public class IgnoreConfiguration
76
{
87
public IgnoreConfiguration() => Shas = Array.Empty<string>();
98

10-
[YamlMember(Alias = "commits-before")]
9+
[JsonPropertyName("commits-before")]
1110
public DateTimeOffset? Before { get; set; }
1211

13-
[YamlMember(Alias = "sha")]
12+
[JsonPropertyName("sha")]
1413
public string[] Shas { get; set; }
1514

16-
[YamlIgnore]
15+
[JsonIgnore]
1716
public virtual bool IsEmpty => Before == null && Shas.Any() == false;
1817

1918
public virtual IEnumerable<IVersionFilter> ToFilters()

src/GitVersion.Core/OutputVariables/VersionVariables.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using System.Text.Encodings.Web;
2-
using System.Text.Json;
32
using GitVersion.Extensions;
43
using GitVersion.Helpers;
54
using YamlDotNet.Serialization;

0 commit comments

Comments
 (0)