Skip to content

Commit e85d9c4

Browse files
committed
Remove decimal support from Serialization
1 parent 92c5a2b commit e85d9c4

File tree

3 files changed

+3
-218
lines changed

3 files changed

+3
-218
lines changed

UnitsNet.Serialization.JsonNet.Tests/AbbreviatedUnitsConverterTests.cs

Lines changed: 0 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -222,50 +222,6 @@ public void DoubleZeroBaseQuantity_DeserializedFromEmptyInput()
222222
Assert.Equal(Mass.BaseUnit, quantity.Unit);
223223
}
224224

225-
[Fact]
226-
public void DecimalZeroIQuantity_DeserializedFromAbbreviatedUnitAndNoValue()
227-
{
228-
var json = "{\"Unit\":\"EB\",\"Type\":\"Information\"}";
229-
230-
var quantity = (Information)DeserializeObject<IQuantity>(json);
231-
232-
Assert.Equal(0, quantity.Value);
233-
Assert.Equal(InformationUnit.Exabyte, quantity.Unit);
234-
}
235-
236-
[Fact]
237-
public void DecimalZeroQuantity_DeserializedFromAbbreviatedUnitAndNoValue()
238-
{
239-
var json = "{\"Unit\":\"EB\"}";
240-
241-
var quantity = DeserializeObject<Information>(json);
242-
243-
Assert.Equal(0, quantity.Value);
244-
Assert.Equal(InformationUnit.Exabyte, quantity.Unit);
245-
}
246-
247-
[Fact]
248-
public void DecimalZeroBaseIQuantity_DeserializedFromQuantityTypeOnly()
249-
{
250-
var json = "{\"Type\":\"Information\"}";
251-
252-
var quantity = (Information)DeserializeObject<IQuantity>(json);
253-
254-
Assert.Equal(0, quantity.Value);
255-
Assert.Equal(Information.BaseUnit, quantity.Unit);
256-
}
257-
258-
[Fact]
259-
public void DecimalZeroBaseQuantity_DeserializedFromEmptyInput()
260-
{
261-
var json = "{}";
262-
263-
var quantity = DeserializeObject<Information>(json);
264-
265-
Assert.Equal(0, quantity.Value);
266-
Assert.Equal(Information.BaseUnit, quantity.Unit);
267-
}
268-
269225
#endregion
270226

271227
#region Compatibility

UnitsNet.Serialization.JsonNet.Tests/UnitsNetBaseJsonConverterTest.cs

Lines changed: 0 additions & 131 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44
using System;
55
using System.Collections.Generic;
6-
using System.Globalization;
76
using Newtonsoft.Json;
87
using Newtonsoft.Json.Converters;
98
using Newtonsoft.Json.Linq;
@@ -38,16 +37,6 @@ public void UnitsNetBaseJsonConverter_ConvertIQuantity_throws_ArgumentNullExcept
3837
Assert.Equal("Value cannot be null. (Parameter 'quantity')", result.Message);
3938
}
4039

41-
[Fact]
42-
public void UnitsNetBaseJsonConverter_ConvertValueUnit_works_as_expected()
43-
{
44-
var result = _sut.Test_ConvertDecimalValueUnit("PowerUnit.Watt", 10.2365m);
45-
46-
Assert.NotNull(result);
47-
Assert.IsType<Power>(result);
48-
Assert.True(Power.FromWatts(10.2365).Equals((Power)result, 1e-5, ComparisonType.Absolute));
49-
}
50-
5140
[Fact]
5241
public void UnitsNetBaseJsonConverter_ConvertValueUnit_throws_UnitsNetException_when_unit_does_not_exist()
5342
{
@@ -58,16 +47,6 @@ public void UnitsNetBaseJsonConverter_ConvertValueUnit_throws_UnitsNetException_
5847
Assert.Equal("UnitsNet.Units.SomeImaginaryUnit,UnitsNet", result.Data["type"]);
5948
}
6049

61-
[Fact]
62-
public void UnitsNetBaseJsonConverter_ConvertValueUnit_throws_UnitsNetException_when_unit_is_in_unexpected_format()
63-
{
64-
var result = Assert.Throws<UnitsNetException>(() => _sut.Test_ConvertDecimalValueUnit("PowerUnit Watt", 10.2365m));
65-
66-
Assert.Equal("\"PowerUnit Watt\" is not a valid unit.", result.Message);
67-
Assert.True(result.Data.Contains("type"));
68-
Assert.Equal("PowerUnit Watt", result.Data["type"]);
69-
}
70-
7150
[Fact]
7251
public void UnitsNetBaseJsonConverter_CreateLocalSerializer_works_as_expected()
7352
{
@@ -107,38 +86,6 @@ public void UnitsNetBaseJsonConverter_ReadValueUnit_works_with_double_quantity()
10786
Assert.Equal(10.2365, result?.Value);
10887
}
10988

110-
[Fact]
111-
public void UnitsNetBaseJsonConverter_ReadValueUnit_works_with_decimal_quantity()
112-
{
113-
var token = new JObject {{"Unit", "PowerUnit.Watt"}, {"Value", 10.2365m}, {"ValueString", "10.2365"}, {"ValueType", "decimal"}};
114-
115-
var result = _sut.Test_ReadDecimalValueUnit(token);
116-
117-
Assert.NotNull(result);
118-
Assert.Equal("PowerUnit.Watt", result?.Unit);
119-
Assert.Equal(10.2365m, result?.Value);
120-
}
121-
122-
[Fact]
123-
public void UnitsNetBaseJsonConverter_ReadValueUnit_returns_null_when_value_is_a_string()
124-
{
125-
var token = new JObject {{"Unit", "PowerUnit.Watt"}, {"Value", "10.2365"}};
126-
127-
var result = _sut.Test_ReadDecimalValueUnit(token);
128-
129-
Assert.Null(result);
130-
}
131-
132-
[Fact]
133-
public void UnitsNetBaseJsonConverter_ReadValueUnit_returns_null_when_value_type_is_not_a_string()
134-
{
135-
var token = new JObject {{"Unit", "PowerUnit.Watt"}, {"Value", 10.2365}, {"ValueType", 123}};
136-
137-
var result = _sut.Test_ReadDecimalValueUnit(token);
138-
139-
Assert.Null(result);
140-
}
141-
14289
[Fact]
14390
public void UnitsNetBaseJsonConverter_ReadDoubleValueUnit_works_with_empty_token()
14491
{
@@ -149,55 +96,6 @@ public void UnitsNetBaseJsonConverter_ReadDoubleValueUnit_works_with_empty_token
14996
Assert.Null(result);
15097
}
15198

152-
[Theory]
153-
[InlineData(false, true)]
154-
[InlineData(true, false)]
155-
public void UnitsNetBaseJsonConverter_ReadValueUnit_returns_null_when_unit_or_value_is_missing(bool withUnit, bool withValue)
156-
{
157-
var token = new JObject();
158-
159-
if (withUnit)
160-
{
161-
token.Add("Unit", "PowerUnit.Watt");
162-
}
163-
164-
if (withValue)
165-
{
166-
token.Add("Value", 10.2365m);
167-
}
168-
169-
var result = _sut.Test_ReadDecimalValueUnit(token);
170-
171-
Assert.Null(result);
172-
}
173-
174-
[Theory]
175-
[InlineData("Unit", "Value", "ValueString", "ValueType")]
176-
[InlineData("unit", "Value", "ValueString", "ValueType")]
177-
[InlineData("Unit", "value", "valueString", "valueType")]
178-
[InlineData("unit", "value", "valueString", "valueType")]
179-
[InlineData("unIT", "vAlUe", "vAlUeString", "vAlUeType")]
180-
public void UnitsNetBaseJsonConverter_ReadValueUnit_works_case_insensitive(
181-
string unitPropertyName,
182-
string valuePropertyName,
183-
string valueStringPropertyName,
184-
string valueTypePropertyName)
185-
{
186-
var token = new JObject
187-
{
188-
{unitPropertyName, "PowerUnit.Watt"},
189-
{valuePropertyName, 10.2365m},
190-
{valueStringPropertyName, 10.2365m.ToString(CultureInfo.InvariantCulture)},
191-
{valueTypePropertyName, "decimal"}
192-
};
193-
194-
var result = _sut.Test_ReadDecimalValueUnit(token);
195-
196-
Assert.NotNull(result);
197-
Assert.Equal("PowerUnit.Watt", result?.Unit);
198-
Assert.Equal(10.2365m, result?.Value);
199-
}
200-
20199
/// <summary>
202100
/// Dummy converter, used to access protected methods on abstract UnitsNetBaseJsonConverter{T}
203101
/// </summary>
@@ -214,24 +112,8 @@ private class TestConverter : UnitsNetBaseJsonConverter<string>
214112
return (result.Unit, result.Value);
215113
}
216114

217-
public (string Unit, decimal Value) Test_ConvertDecimalIQuantity(IQuantity value)
218-
{
219-
var result = ConvertIQuantity(value);
220-
if (result is ExtendedValueUnit {ValueType: "decimal"} decimalResult)
221-
{
222-
return (result.Unit, decimal.Parse(decimalResult.ValueString, CultureInfo.InvariantCulture));
223-
}
224-
225-
throw new ArgumentException("The quantity does not have a decimal value", nameof(value));
226-
}
227-
228115
public IQuantity Test_ConvertDoubleValueUnit(string unit, double value) => Test_ConvertValueUnit(new ValueUnit {Unit = unit, Value = value});
229116

230-
public IQuantity Test_ConvertDecimalValueUnit(string unit, decimal value) => Test_ConvertValueUnit(new ExtendedValueUnit
231-
{
232-
Unit = unit, Value = (double) value, ValueString = value.ToString(CultureInfo.InvariantCulture), ValueType = "decimal"
233-
});
234-
235117
private IQuantity Test_ConvertValueUnit(ValueUnit valueUnit) => ConvertValueUnit(valueUnit);
236118

237119
public JsonSerializer Test_CreateLocalSerializer(JsonSerializer serializer) => CreateLocalSerializer(serializer, this);
@@ -246,19 +128,6 @@ public IQuantity Test_ConvertDecimalValueUnit(string unit, decimal value) => Tes
246128

247129
return (result.Unit, result.Value);
248130
}
249-
250-
public (string Unit, decimal Value)? Test_ReadDecimalValueUnit(JToken jsonToken)
251-
{
252-
var result = ReadValueUnit(jsonToken);
253-
254-
if (result is ExtendedValueUnit {ValueType: "decimal"} decimalResult)
255-
{
256-
return (result.Unit, decimal.Parse(decimalResult.ValueString, CultureInfo.InvariantCulture));
257-
}
258-
259-
return null;
260-
}
261-
262131
}
263132
}
264133
}

UnitsNet.Serialization.JsonNet/UnitsNetBaseJsonConverter.cs

Lines changed: 3 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -57,38 +57,20 @@ public void RegisterCustomType(Type quantity, Type unit)
5757

5858
var unit = jsonObject.GetValue(nameof(ValueUnit.Unit), StringComparison.OrdinalIgnoreCase);
5959
var value = jsonObject.GetValue(nameof(ValueUnit.Value), StringComparison.OrdinalIgnoreCase);
60-
var valueType = jsonObject.GetValue(nameof(ExtendedValueUnit.ValueType), StringComparison.OrdinalIgnoreCase);
61-
var valueString = jsonObject.GetValue(nameof(ExtendedValueUnit.ValueString), StringComparison.OrdinalIgnoreCase);
6260

6361
if (unit == null || value == null)
6462
{
6563
return null;
6664
}
6765

68-
if (valueType == null)
69-
{
70-
if (value.Type != JTokenType.Float && value.Type != JTokenType.Integer)
71-
{
72-
return null;
73-
}
74-
75-
return new ValueUnit {
76-
Unit = unit.Value<string>() ?? throw new InvalidOperationException("Unit was not a string."),
77-
Value = value.Value<double>()
78-
};
79-
}
80-
81-
if (valueType.Type != JTokenType.String)
66+
if (value.Type != JTokenType.Float && value.Type != JTokenType.Integer)
8267
{
8368
return null;
8469
}
8570

86-
return new ExtendedValueUnit
87-
{
71+
return new ValueUnit {
8872
Unit = unit.Value<string>() ?? throw new InvalidOperationException("Unit was not a string."),
89-
Value = value.Value<double>(),
90-
ValueType = valueType.Value<string>(),
91-
ValueString = valueString?.Value<string>()
73+
Value = value.Value<double>()
9274
};
9375
}
9476

@@ -247,27 +229,5 @@ protected class ValueUnit
247229
[JsonProperty(Order = 2)]
248230
public double Value { get; set; }
249231
}
250-
251-
/// <summary>
252-
/// A structure used to serialize/deserialize non-double Units.NET unit instances.
253-
/// </summary>
254-
/// <remarks>
255-
/// This type was added for lossless serialization of quantities with <see cref="decimal"/> values.
256-
/// The <see cref="decimal"/> type distinguishes between 100 and 100.00 but Json.NET does not, therefore we serialize decimal values as string.
257-
/// </remarks>
258-
protected sealed class ExtendedValueUnit : ValueUnit
259-
{
260-
/// <summary>
261-
/// The value as a string.
262-
/// </summary>
263-
[JsonProperty(Order = 3)]
264-
public string? ValueString { get; set; }
265-
266-
/// <summary>
267-
/// The type of the value, e.g. "decimal".
268-
/// </summary>
269-
[JsonProperty(Order = 4)]
270-
public string? ValueType { get; set; }
271-
}
272232
}
273233
}

0 commit comments

Comments
 (0)