align with go json unmarshal (#1397)
This commit is contained in:
@@ -99,7 +99,7 @@ namespace k8s.Models
|
||||
|
||||
protected bool Equals(ResourceQuantity other)
|
||||
{
|
||||
return Format == other?.Format && _unitlessValue.Equals(other._unitlessValue);
|
||||
return _unitlessValue.Equals(other?._unitlessValue);
|
||||
}
|
||||
|
||||
public override bool Equals(object obj)
|
||||
|
||||
@@ -2,9 +2,23 @@ namespace k8s.Models
|
||||
{
|
||||
internal sealed class ResourceQuantityJsonConverter : JsonConverter<ResourceQuantity>
|
||||
{
|
||||
// https://github.com/kubernetes/apimachinery/blob/4b14f804a0babdcc58e695d72f77ad29f536511e/pkg/api/resource/quantity.go#L683
|
||||
public override ResourceQuantity Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
||||
{
|
||||
return new ResourceQuantity(reader.GetString());
|
||||
switch (reader.TokenType)
|
||||
{
|
||||
case JsonTokenType.Null:
|
||||
return new ResourceQuantity(null);
|
||||
case JsonTokenType.Number:
|
||||
if (reader.TryGetDouble(out var val))
|
||||
{
|
||||
return new ResourceQuantity(Convert.ToString(val));
|
||||
}
|
||||
|
||||
return reader.GetDecimal();
|
||||
default:
|
||||
return new ResourceQuantity(reader.GetString());
|
||||
}
|
||||
}
|
||||
|
||||
public override void Write(Utf8JsonWriter writer, ResourceQuantity value, JsonSerializerOptions options)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using k8s.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Xunit;
|
||||
using static k8s.Models.ResourceQuantity.SuffixFormat;
|
||||
|
||||
@@ -200,7 +201,7 @@ namespace k8s.Tests
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Serialize()
|
||||
public void SerializeJson()
|
||||
{
|
||||
{
|
||||
ResourceQuantity quantity = 12000;
|
||||
@@ -209,10 +210,25 @@ namespace k8s.Tests
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DeserializeYaml()
|
||||
public void DeserializeJson()
|
||||
{
|
||||
var value = KubernetesYaml.Deserialize<ResourceQuantity>("\"1\"");
|
||||
Assert.Equal(new ResourceQuantity(1, 0, DecimalSI), value);
|
||||
// str
|
||||
{
|
||||
var value = KubernetesJson.Deserialize<Dictionary<string, ResourceQuantity>>(@"{""cpu"": ""1.1""}");
|
||||
Assert.Equal(new ResourceQuantity(11, -1, DecimalSI), value["cpu"]);
|
||||
}
|
||||
|
||||
// int
|
||||
{
|
||||
var value = KubernetesJson.Deserialize<Dictionary<string, ResourceQuantity>>(@"{""cpu"": 1}");
|
||||
Assert.Equal(new ResourceQuantity(1, 0, DecimalSI), value["cpu"]);
|
||||
}
|
||||
|
||||
// double
|
||||
{
|
||||
var value = KubernetesJson.Deserialize<Dictionary<string, ResourceQuantity>>(@"{""cpu"": 1.1}");
|
||||
Assert.Equal(new ResourceQuantity(11, -1, DecimalSI), value["cpu"]);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -221,5 +237,27 @@ namespace k8s.Tests
|
||||
var value = KubernetesYaml.Serialize(new ResourceQuantity(1, -1, DecimalSI));
|
||||
Assert.Equal("100m", value);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DeserializeYaml()
|
||||
{
|
||||
// str
|
||||
{
|
||||
var value = KubernetesYaml.Deserialize<ResourceQuantity>("\"1\"");
|
||||
Assert.Equal(new ResourceQuantity(1, 0, DecimalSI), value);
|
||||
}
|
||||
|
||||
// int
|
||||
{
|
||||
var value = KubernetesYaml.Deserialize<ResourceQuantity>("1");
|
||||
Assert.Equal(new ResourceQuantity(1, 0, DecimalSI), value);
|
||||
}
|
||||
|
||||
// double
|
||||
{
|
||||
var value = KubernetesYaml.Deserialize<ResourceQuantity>("1.1");
|
||||
Assert.Equal(new ResourceQuantity(11, -1, DecimalSI), value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user