Skip to content
Closed
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion CodeGen/Generators/UnitsNetGen/QuantityGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ public override string Generate()
using System;
using System.Globalization;
using System.Linq;
using System.Runtime.Serialization;
using JetBrains.Annotations;
using UnitsNet.InternalHelpers;
using UnitsNet.Units;
Expand All @@ -70,7 +71,8 @@ namespace UnitsNet
/// </remarks>");

Writer.W(@$"
public partial struct {_quantity.Name} : IQuantity<{_unitEnumName}>, ");
[DataContract]
public partial struct {_quantity.Name} : IQuantity<{_unitEnumName}>, ");
if (_quantity.BaseType == "decimal")
{
Writer.W("IDecimalQuantity, ");
Expand All @@ -82,11 +84,13 @@ public partial struct {_quantity.Name} : IQuantity<{_unitEnumName}>, ");
/// <summary>
/// The numeric value this quantity was constructed with.
/// </summary>
[DataMember(Name = ""Value"", Order = 1)]
private readonly {_quantity.BaseType} _value;

/// <summary>
/// The unit this quantity was constructed with.
/// </summary>
[DataMember(Name = ""Unit"", Order = 2)]
private readonly {_unitEnumName}? _unit;
");
GenerateStaticConstructor();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net48</TargetFramework>

<IsPackable>false</IsPackable>

<LangVersion>latest</LangVersion>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.4.0" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.1" />
<DotNetCliToolReference Include="dotnet-xunit" Version="2.3.1" />
<DotNetCliToolReference Include="JetBrains.dotCover.CommandLineTools" Version="2019.1.3" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\UnitsNet.Serialization.DataContract.Tests\UnitsNet.Serialization.DataContract.Tests.csproj" />
<ProjectReference Include="..\UnitsNet.Serialization.JsonNet\UnitsNet.Serialization.JsonNet.csproj" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
// Licensed under MIT No Attribution, see LICENSE file at the root.
// Copyright 2013 Andreas Gullberg Larsen ([email protected]). Maintained at https://github.com/angularsen/UnitsNet.

using System.IO;
using System.Runtime.Serialization.Json;
using Newtonsoft.Json;
using UnitsNet.Serialization.DataContract.Tests;
using UnitsNet.Serialization.Surrogates;
using Xunit;

namespace UnitsNet.Serialization.DataContract.Compatibility.JsonNetTests.UnitsNetIQuantityJsonConverter
{
public class DataContractToJsonNetSerializationTests : SerializationTestsBase<string>
{
private readonly DataContractJsonSerializerSettings _dataContractJsonSerializerSettings;

private readonly JsonSerializerSettings _jsonNetSerializerSettings;

public DataContractToJsonNetSerializationTests()
{
_jsonNetSerializerSettings = new JsonSerializerSettings {TypeNameHandling = TypeNameHandling.None};
_jsonNetSerializerSettings.Converters.Add(new JsonNet.UnitsNetIQuantityJsonConverter());
_dataContractJsonSerializerSettings = new DataContractJsonSerializerSettings {DataContractSurrogate = new ExtendedQuantityDataContractSurrogate()};
}

protected override string SerializeObject(object obj)
{
var serializer = new DataContractJsonSerializer(obj.GetType(), _dataContractJsonSerializerSettings);
using var stream = new MemoryStream();
serializer.WriteObject(stream, obj);
stream.Position = 0;
using var streamReader = new StreamReader(stream);
return streamReader.ReadToEnd();
}

protected override T DeserializeObject<T>(string payload)
{
return JsonConvert.DeserializeObject<T>(payload, _jsonNetSerializerSettings);
}


[Fact(Skip = "Tuples are currently not supported by the UnitsNetIQuantityJsonConverter")]
public override void TupleOfMixedValueQuantities_SerializationRoundTrips()
{
base.TupleOfMixedValueQuantities_SerializationRoundTrips();
}

[Fact(Skip = "Tuples are currently not supported by the UnitsNetIQuantityJsonConverter")]
public override void TupleOfDoubleAndNullQuantities_SerializationRoundTrips()
{
base.TupleOfDoubleAndNullQuantities_SerializationRoundTrips();
}

[Fact(Skip = "Tuples are currently not supported by the UnitsNetIQuantityJsonConverter")]
public override void TupleOfDecimalAndNullQuantities_SerializationRoundTrips()
{
base.TupleOfDecimalAndNullQuantities_SerializationRoundTrips();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
// Licensed under MIT No Attribution, see LICENSE file at the root.
// Copyright 2013 Andreas Gullberg Larsen ([email protected]). Maintained at https://github.com/angularsen/UnitsNet.

using System.IO;
using System.Runtime.Serialization.Json;
using Newtonsoft.Json;
using UnitsNet.Serialization.DataContract.Tests;
using UnitsNet.Serialization.Surrogates;
using Xunit;

namespace UnitsNet.Serialization.DataContract.Compatibility.JsonNetTests.UnitsNetIQuantityJsonConverter
{
public class JsonNetToDataContractSerializationTests : SerializationTestsBase<string>
{
private readonly DataContractJsonSerializerSettings _dataContractJsonSerializerSettings;

private readonly JsonSerializerSettings _jsonNetSerializerSettings;

public JsonNetToDataContractSerializationTests()
{
_jsonNetSerializerSettings = new JsonSerializerSettings {TypeNameHandling = TypeNameHandling.None};
_jsonNetSerializerSettings.Converters.Add(new JsonNet.UnitsNetIQuantityJsonConverter());
_dataContractJsonSerializerSettings = new DataContractJsonSerializerSettings {DataContractSurrogate = new ExtendedQuantityDataContractSurrogate()};
}

protected override string SerializeObject(object obj)
{
return JsonConvert.SerializeObject(obj, _jsonNetSerializerSettings);
}

protected override T DeserializeObject<T>(string payload)
{
var serializer = new DataContractJsonSerializer(typeof(T), _dataContractJsonSerializerSettings);
using var stream = new MemoryStream();
using var writer = new StreamWriter(stream);
writer.Write(payload);
writer.Flush();
stream.Position = 0;
return (T) serializer.ReadObject(stream);
}

[Fact(Skip = "Tuples are currently not supported by the UnitsNetIQuantityJsonConverter")]
public override void TupleOfMixedValueQuantities_SerializationRoundTrips()
{
base.TupleOfMixedValueQuantities_SerializationRoundTrips();
}

[Fact(Skip = "Tuples are currently not supported by the UnitsNetIQuantityJsonConverter")]
public override void TupleOfDoubleAndNullQuantities_SerializationRoundTrips()
{
base.TupleOfDoubleAndNullQuantities_SerializationRoundTrips();
}

[Fact(Skip = "Tuples are currently not supported by the UnitsNetIQuantityJsonConverter")]
public override void TupleOfDecimalAndNullQuantities_SerializationRoundTrips()
{
base.TupleOfDecimalAndNullQuantities_SerializationRoundTrips();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
// Licensed under MIT No Attribution, see LICENSE file at the root.
// Copyright 2013 Andreas Gullberg Larsen ([email protected]). Maintained at https://github.com/angularsen/UnitsNet.

using System.IO;
using System.Runtime.Serialization.Json;
using Newtonsoft.Json;
using UnitsNet.Serialization.DataContract.Tests;
using UnitsNet.Serialization.Surrogates;
using Xunit;

namespace UnitsNet.Serialization.DataContract.Compatibility.JsonNetTests.UnitsNetJsonConverter
{
public class DataContractToJsonNetSerializationTests : SerializationTestsBase<string>
{
private readonly DataContractJsonSerializerSettings _dataContractJsonSerializerSettings;

private readonly JsonSerializerSettings _jsonNetSerializerSettings;

public DataContractToJsonNetSerializationTests()
{
_jsonNetSerializerSettings = new JsonSerializerSettings();
_jsonNetSerializerSettings.Converters.Add(new JsonNet.UnitsNetJsonConverter());
_dataContractJsonSerializerSettings = new DataContractJsonSerializerSettings {DataContractSurrogate = new BasicQuantityContractSurrogate()};
}

protected override string SerializeObject(object obj)
{
var serializer = new DataContractJsonSerializer(obj.GetType(), _dataContractJsonSerializerSettings);
using var stream = new MemoryStream();
serializer.WriteObject(stream, obj);
stream.Position = 0;
using var streamReader = new StreamReader(stream);
return streamReader.ReadToEnd();
}

protected override T DeserializeObject<T>(string payload)
{
return JsonConvert.DeserializeObject<T>(payload, _jsonNetSerializerSettings);
}

[Fact(Skip = "Arrays are currently not supported by the UnitsNetJsonConverter")]
public override void ArrayOfDoubleValueQuantities_SerializationRoundTrips()
{
base.ArrayOfDoubleValueQuantities_SerializationRoundTrips();
}

[Fact(Skip = "Arrays are currently not supported by the UnitsNetJsonConverter")]
public override void ArrayOfDecimalValueQuantities_SerializationRoundTrips()
{
base.ArrayOfDecimalValueQuantities_SerializationRoundTrips();
}

[Fact(Skip = "Arrays are currently not supported by the UnitsNetJsonConverter")]
public override void EmptyArray_RoundTripsEmpty()
{
base.EmptyArray_RoundTripsEmpty();
}

[Fact(Skip = "Tuples are currently not supported by the UnitsNetJsonConverter")]
public override void TupleOfMixedValueQuantities_SerializationRoundTrips()
{
base.TupleOfMixedValueQuantities_SerializationRoundTrips();
}

[Fact(Skip = "Tuples are currently not supported by the UnitsNetJsonConverter")]
public override void TupleOfDoubleAndNullQuantities_SerializationRoundTrips()
{
base.TupleOfDoubleAndNullQuantities_SerializationRoundTrips();
}

[Fact(Skip = "Tuples are currently not supported by the UnitsNetJsonConverter")]
public override void TupleOfDecimalAndNullQuantities_SerializationRoundTrips()
{
base.TupleOfDecimalAndNullQuantities_SerializationRoundTrips();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
// Licensed under MIT No Attribution, see LICENSE file at the root.
// Copyright 2013 Andreas Gullberg Larsen ([email protected]). Maintained at https://github.com/angularsen/UnitsNet.

using System.IO;
using System.Runtime.Serialization.Json;
using Newtonsoft.Json;
using UnitsNet.Serialization.DataContract.Tests;
using UnitsNet.Serialization.Surrogates;
using Xunit;

namespace UnitsNet.Serialization.DataContract.Compatibility.JsonNetTests.UnitsNetJsonConverter
{
public class JsonNetToDataContractSerializationTests : SerializationTestsBase<string>
{
private readonly DataContractJsonSerializerSettings _dataContractJsonSerializerSettings;

private readonly JsonSerializerSettings _jsonNetSerializerSettings;

public JsonNetToDataContractSerializationTests()
{
_jsonNetSerializerSettings = new JsonSerializerSettings();
_jsonNetSerializerSettings.Converters.Add(new JsonNet.UnitsNetJsonConverter());
_dataContractJsonSerializerSettings = new DataContractJsonSerializerSettings {DataContractSurrogate = new BasicQuantityContractSurrogate()};
}

protected override string SerializeObject(object obj)
{
return JsonConvert.SerializeObject(obj, _jsonNetSerializerSettings);
}

protected override T DeserializeObject<T>(string payload)
{
var serializer = new DataContractJsonSerializer(typeof(T), _dataContractJsonSerializerSettings);
using var stream = new MemoryStream();
using var writer = new StreamWriter(stream);
writer.Write(payload);
writer.Flush();
stream.Position = 0;
return (T) serializer.ReadObject(stream);
}

[Fact(Skip = "Arrays are currently not supported by the UnitsNetJsonConverter")]
public override void ArrayOfDoubleValueQuantities_SerializationRoundTrips()
{
base.ArrayOfDoubleValueQuantities_SerializationRoundTrips();
}

[Fact(Skip = "Arrays are currently not supported by the UnitsNetJsonConverter")]
public override void ArrayOfDecimalValueQuantities_SerializationRoundTrips()
{
base.ArrayOfDecimalValueQuantities_SerializationRoundTrips();
}

[Fact(Skip = "Arrays are currently not supported by the UnitsNetJsonConverter")]
public override void EmptyArray_RoundTripsEmpty()
{
base.EmptyArray_RoundTripsEmpty();
}

[Fact(Skip = "Tuples are currently not supported by the UnitsNetJsonConverter")]
public override void TupleOfMixedValueQuantities_SerializationRoundTrips()
{
base.TupleOfMixedValueQuantities_SerializationRoundTrips();
}

[Fact(Skip = "Tuples are currently not supported by the UnitsNetJsonConverter")]
public override void TupleOfDoubleAndNullQuantities_SerializationRoundTrips()
{
base.TupleOfDoubleAndNullQuantities_SerializationRoundTrips();
}

[Fact(Skip = "Tuples are currently not supported by the UnitsNetJsonConverter")]
public override void TupleOfDecimalAndNullQuantities_SerializationRoundTrips()
{
base.TupleOfDecimalAndNullQuantities_SerializationRoundTrips();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
// Licensed under MIT No Attribution, see LICENSE file at the root.
// Copyright 2013 Andreas Gullberg Larsen ([email protected]). Maintained at https://github.com/angularsen/UnitsNet.

using System.IO;
using System.Runtime.Serialization.Json;

namespace UnitsNet.Serialization.DataContract.Tests.DataContractJsonSerializerTests
{
public abstract class DataContractJsonSerializerTestsBase : SerializationTestsBase<string>
{
private readonly DataContractJsonSerializerSettings _settings;

protected DataContractJsonSerializerTestsBase()
{
}

protected DataContractJsonSerializerTestsBase(DataContractJsonSerializerSettings settings)
{
_settings = settings;
}

protected override string SerializeObject(object obj)
{
var serializer = new DataContractJsonSerializer(obj.GetType(), _settings);
using var stream = new MemoryStream();
serializer.WriteObject(stream, obj);
stream.Position = 0;
using var streamReader = new StreamReader(stream);
return streamReader.ReadToEnd();
}

protected override T DeserializeObject<T>(string xml)
{
var serializer = new DataContractJsonSerializer(typeof(T), _settings);
using var stream = new MemoryStream();
using var writer = new StreamWriter(stream);
writer.Write(xml);
writer.Flush();
stream.Position = 0;
return (T) serializer.ReadObject(stream);
}
}
}
Loading