diff --git a/.github/workflows/feature_branches.yml b/.github/workflows/feature_branches.yml index 7199d5bb..587b9a08 100644 --- a/.github/workflows/feature_branches.yml +++ b/.github/workflows/feature_branches.yml @@ -22,7 +22,7 @@ jobs: - name: Setup .NET Core uses: actions/setup-dotnet@v4 with: - dotnet-version: 6.0.201 + dotnet-version: 8 - name: Build/Check for compile errors (dotnet build) run: dotnet build --configuration Release --version-suffix "${{github.sha}}" - name: Run Unit Tests (dotnet test) diff --git a/BO4E/meta/LenientConverters/LenientGeraetemerkmalGasConverter.cs b/BO4E/meta/LenientConverters/LenientGeraetemerkmalGasConverter.cs index b68b3105..31256b35 100644 --- a/BO4E/meta/LenientConverters/LenientGeraetemerkmalGasConverter.cs +++ b/BO4E/meta/LenientConverters/LenientGeraetemerkmalGasConverter.cs @@ -12,7 +12,7 @@ namespace BO4E.meta.LenientConverters; public class LenientGeraetemerkmalGasConverter : JsonConverter { /// - public override bool CanWrite => false; + public override bool CanWrite => true; /// public override bool CanConvert(Type objectType) @@ -41,7 +41,10 @@ JsonSerializer serializer rawValue = reader.Value?.ToString(); break; } - + if (string.IsNullOrEmpty(rawValue)) + { + return null; + } try { return Enums.Parse(rawValue); @@ -59,6 +62,6 @@ JsonSerializer serializer /// public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { - throw new NotImplementedException(); + writer.WriteRawValue("\"" + value.ToString() + "\""); } } diff --git a/BO4E/meta/LenientConverters/LenientSystemTextGeraetemerkmalGasConverter.cs b/BO4E/meta/LenientConverters/LenientSystemTextGeraetemerkmalGasConverter.cs index 715ff36a..81c13199 100644 --- a/BO4E/meta/LenientConverters/LenientSystemTextGeraetemerkmalGasConverter.cs +++ b/BO4E/meta/LenientConverters/LenientSystemTextGeraetemerkmalGasConverter.cs @@ -57,13 +57,6 @@ JsonSerializerOptions options ) { var stringValue = value.ToString(); - var match = GasPrefixRegex.Match(stringValue); - if (!match.Success) - { - writer.WriteStringValue(stringValue); - return; - } - var rest = match.Groups["rest"].Value; - writer.WriteStringValue(rest); + writer.WriteStringValue(stringValue); } } diff --git a/BO4E/meta/LenientConverters/LenientSystemTextNullableGeraetemerkmalGasConverter.cs b/BO4E/meta/LenientConverters/LenientSystemTextNullableGeraetemerkmalGasConverter.cs index 68c5a5a3..ffa654be 100644 --- a/BO4E/meta/LenientConverters/LenientSystemTextNullableGeraetemerkmalGasConverter.cs +++ b/BO4E/meta/LenientConverters/LenientSystemTextNullableGeraetemerkmalGasConverter.cs @@ -62,16 +62,8 @@ JsonSerializerOptions options { if (value.HasValue) { - // Remove the "GAS_" prefix if it exists - var stringValue = value.Value.ToString(); - var match = GasPrefixRegex.Match(stringValue); - if (!match.Success) - { - writer.WriteStringValue(stringValue); - return; - } - var rest = match.Groups["rest"].Value; - writer.WriteStringValue(rest); + var stringValue = value.ToString(); + writer.WriteStringValue(stringValue); } else { diff --git a/BO4E/protobuf-files/bo4e.proto b/BO4E/protobuf-files/bo4e.proto index b10594b3..10ec5447 100644 --- a/BO4E/protobuf-files/bo4e.proto +++ b/BO4E/protobuf-files/bo4e.proto @@ -329,6 +329,7 @@ enum Energierichtung { AUSSP = 0; EINSP = 1; RUHEND = 2; + KUNDENANLAGE = 3; } message Erreichbarkeit { option (.protobuf_net.msgopt).namespace = "BO4E.COM"; @@ -961,7 +962,7 @@ message Marktlokation { Geschaeftspartner Endkunde = 17; Adresse Lokationsadresse = 18; Geokoordinaten Geoadresse = 19; - Katasteradresse Katasterinformation = 20; + repeated Katasteradresse Katasterinformation = 20; repeated Messlokationszuordnung ZugehoerigeMesslokationen = 28; repeated Netznutzungsabrechnungsdaten Netznutzungsabrechnungsdaten = 37; Sperrstatus Sperrstatus = 38; diff --git a/BO4ETestProject/TestGeraetemerkmalConverter.cs b/BO4ETestProject/TestGeraetemerkmalConverter.cs index a6d95628..e4d75657 100644 --- a/BO4ETestProject/TestGeraetemerkmalConverter.cs +++ b/BO4ETestProject/TestGeraetemerkmalConverter.cs @@ -1,3 +1,4 @@ +using System.Collections.Generic; using System.Text.Json.Serialization; using BO4E.ENUM; using BO4E.meta.LenientConverters; @@ -84,6 +85,27 @@ public void TestNewtonsoft_Success_Nullable() result.Merkmal.Should().Be(Geraetemerkmal.GAS_G4); } + [TestMethod] + public void TestNewtonsoft_Success_Nullable_Serialization() + { + var myInstance = new SomethingWithANullableGeraetemerkmal() + { + Merkmal = Geraetemerkmal.GAS_G4, + }; + var result = JsonConvert.SerializeObject( + myInstance, + new JsonSerializerSettings() + { + Converters = new List() + { + new LenientGeraetemerkmalGasConverter(), + new Newtonsoft.Json.Converters.StringEnumConverter(), + }, + } + ); + result.Should().NotBeNullOrWhiteSpace().And.Contain("\"GAS_G4\"").And.NotContain("\"G4\""); + } + [TestMethod] public void TestNewtonsoft_Success_Nullable_WASSER_MWZW() { @@ -120,6 +142,21 @@ public void TestSystemText_Success_NonNullable() result.Merkmal.Should().Be(Geraetemerkmal.GAS_G4); } + [TestMethod] + public void TestSystemText_Success_NonNullable_Serialization() + { + var myInstance = new SomethingWithANullableGeraetemerkmal() + { + Merkmal = Geraetemerkmal.GAS_G4, + }; + var settings = new System.Text.Json.JsonSerializerOptions() + { + Converters = { new LenientSystemTextGeraetemerkmalGasConverter() }, + }; + var result = System.Text.Json.JsonSerializer.Serialize(myInstance, settings); + result.Should().NotBeNullOrWhiteSpace().And.Contain("\"GAS_G4\"").And.NotContain("\"G4\""); + } + [TestMethod] public void TestSystemText_Success_NonNullable_WASSER_MWZW() { @@ -172,7 +209,7 @@ public void TestSystemText_Write_NonNullable() }; var instance = new SomethingWithAGeraetemerkmal { Merkmal = Geraetemerkmal.GAS_G4 }; var json = System.Text.Json.JsonSerializer.Serialize(instance, settings); - json.Should().Be("{\"merkmal\":\"G4\"}"); + json.Should().Be($"{{\"merkmal\":\"{Geraetemerkmal.GAS_G4.ToString()}\"}}"); } [TestMethod] @@ -187,7 +224,7 @@ public void TestSystemText_Write_Nullable() Merkmal = Geraetemerkmal.GAS_G2P5, }; var json = System.Text.Json.JsonSerializer.Serialize(instance, settings); - json.Should().Be("{\"merkmal\":\"G2P5\"}"); + json.Should().Be("{\"merkmal\":\"GAS_G2P5\"}"); } [TestMethod]