diff --git a/csharp/App/SaliMax/src/Utils.cs b/csharp/App/SaliMax/src/Utils.cs index 4104b5384..1cf608f84 100644 --- a/csharp/App/SaliMax/src/Utils.cs +++ b/csharp/App/SaliMax/src/Utils.cs @@ -6,6 +6,6 @@ public static class Utils { public static Decimal Round3(this Decimal d) { - return DecimalUtils.RoundToSignificantFigures(d, 3); + return DecimalUtils.RoundToSignificantDigits(d, 3); } } \ No newline at end of file diff --git a/csharp/Lib/Units/Angle.generated.cs b/csharp/Lib/Units/Angle.generated.cs index f2317f977..0c1abd7e5 100644 --- a/csharp/Lib/Units/Angle.generated.cs +++ b/csharp/Lib/Units/Angle.generated.cs @@ -2,6 +2,9 @@ #define Sum using static System.Math; +using System.Text.Json; +using System.Text.Json.Serialization; +using InnovEnergy.Lib.Utils; namespace InnovEnergy.Lib.Units; @@ -10,7 +13,7 @@ using T = Angle; public readonly partial struct Angle { public Decimal Value { get; } - public override String ToString() => Value + Unit; + public override String ToString() => Value.RoundToSignificantDigits(Units.DisplaySignificantDigits) + Unit; // scalar multiplication @@ -75,3 +78,19 @@ public readonly partial struct Angle public override Int32 GetHashCode() => Value.GetHashCode(); } + + +internal class AngleConverter : JsonConverter +{ + public override Angle Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + return new Angle(reader.GetDecimal()); + } + + public override void Write(Utf8JsonWriter writer, Angle value, JsonSerializerOptions options) + { + var rounded = value.Value.RoundToSignificantDigits(Units.JsonSignificantDigits); + + writer.WriteNumberValue(rounded); + } +} \ No newline at end of file diff --git a/csharp/Lib/Units/ApparentPower.generated.cs b/csharp/Lib/Units/ApparentPower.generated.cs index 0775151c9..ae632e889 100644 --- a/csharp/Lib/Units/ApparentPower.generated.cs +++ b/csharp/Lib/Units/ApparentPower.generated.cs @@ -2,6 +2,9 @@ #define Sum using static System.Math; +using System.Text.Json; +using System.Text.Json.Serialization; +using InnovEnergy.Lib.Utils; namespace InnovEnergy.Lib.Units; @@ -10,7 +13,7 @@ using T = ApparentPower; public readonly partial struct ApparentPower { public Decimal Value { get; } - public override String ToString() => Value + Unit; + public override String ToString() => Value.RoundToSignificantDigits(Units.DisplaySignificantDigits) + Unit; // scalar multiplication @@ -75,3 +78,19 @@ public readonly partial struct ApparentPower public override Int32 GetHashCode() => Value.GetHashCode(); } + + +internal class ApparentPowerConverter : JsonConverter +{ + public override ApparentPower Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + return new ApparentPower(reader.GetDecimal()); + } + + public override void Write(Utf8JsonWriter writer, ApparentPower value, JsonSerializerOptions options) + { + var rounded = value.Value.RoundToSignificantDigits(Units.JsonSignificantDigits); + + writer.WriteNumberValue(rounded); + } +} \ No newline at end of file diff --git a/csharp/Lib/Units/Current.generated.cs b/csharp/Lib/Units/Current.generated.cs index 93e9bdbf7..1bb733666 100644 --- a/csharp/Lib/Units/Current.generated.cs +++ b/csharp/Lib/Units/Current.generated.cs @@ -2,6 +2,9 @@ #define Sum using static System.Math; +using System.Text.Json; +using System.Text.Json.Serialization; +using InnovEnergy.Lib.Utils; namespace InnovEnergy.Lib.Units; @@ -10,7 +13,7 @@ using T = Current; public readonly partial struct Current { public Decimal Value { get; } - public override String ToString() => Value + Unit; + public override String ToString() => Value.RoundToSignificantDigits(Units.DisplaySignificantDigits) + Unit; // scalar multiplication @@ -75,3 +78,19 @@ public readonly partial struct Current public override Int32 GetHashCode() => Value.GetHashCode(); } + + +internal class CurrentConverter : JsonConverter +{ + public override Current Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + return new Current(reader.GetDecimal()); + } + + public override void Write(Utf8JsonWriter writer, Current value, JsonSerializerOptions options) + { + var rounded = value.Value.RoundToSignificantDigits(Units.JsonSignificantDigits); + + writer.WriteNumberValue(rounded); + } +} \ No newline at end of file diff --git a/csharp/Lib/Units/Frequency.generated.cs b/csharp/Lib/Units/Frequency.generated.cs index 9618c18bc..b1e8c6e65 100644 --- a/csharp/Lib/Units/Frequency.generated.cs +++ b/csharp/Lib/Units/Frequency.generated.cs @@ -2,6 +2,9 @@ #define Equal using static System.Math; +using System.Text.Json; +using System.Text.Json.Serialization; +using InnovEnergy.Lib.Utils; namespace InnovEnergy.Lib.Units; @@ -10,7 +13,7 @@ using T = Frequency; public readonly partial struct Frequency { public Decimal Value { get; } - public override String ToString() => Value + Unit; + public override String ToString() => Value.RoundToSignificantDigits(Units.DisplaySignificantDigits) + Unit; // scalar multiplication @@ -75,3 +78,19 @@ public readonly partial struct Frequency public override Int32 GetHashCode() => Value.GetHashCode(); } + + +internal class FrequencyConverter : JsonConverter +{ + public override Frequency Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + return new Frequency(reader.GetDecimal()); + } + + public override void Write(Utf8JsonWriter writer, Frequency value, JsonSerializerOptions options) + { + var rounded = value.Value.RoundToSignificantDigits(Units.JsonSignificantDigits); + + writer.WriteNumberValue(rounded); + } +} \ No newline at end of file diff --git a/csharp/Lib/Units/Generator/Template.txt b/csharp/Lib/Units/Generator/Template.txt index c78a3fcc6..857ecad58 100644 --- a/csharp/Lib/Units/Generator/Template.txt +++ b/csharp/Lib/Units/Generator/Template.txt @@ -1,7 +1,10 @@ #nullable enable // Auto-generated code requires an explicit '#nullable' directive in source. -#define Type +#define AggregationType using static System.Math; +using System.Text.Json; +using System.Text.Json.Serialization; +using InnovEnergy.Lib.Utils; namespace InnovEnergy.Lib.Units; @@ -10,7 +13,7 @@ using T = Template; public readonly partial struct Template { public Decimal Value { get; } - public override String ToString() => Value + Unit; + public override String ToString() => Value.RoundToSignificantDigits(Units.DisplaySignificantDigits) + Unit; // scalar multiplication @@ -75,3 +78,19 @@ public readonly partial struct Template public override Int32 GetHashCode() => Value.GetHashCode(); } + + +internal class TemplateConverter : JsonConverter