Skip to content

Commit

Permalink
Add support for empty string returning default value of T.
Browse files Browse the repository at this point in the history
  • Loading branch information
tomlm committed Nov 21, 2024
1 parent 8fe35ee commit dd47f91
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 7 deletions.
10 changes: 9 additions & 1 deletion YamlConvert.Tests/YamlConvert.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,18 @@

<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>

<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
</PropertyGroup>

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<WarningLevel>2</WarningLevel>
</PropertyGroup>

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<WarningLevel>2</WarningLevel>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.9.4" />
<PackageReference Include="xunit" Version="2.4.1" />
Expand Down
17 changes: 17 additions & 0 deletions YamlConvert.Tests/YamlConvertTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using System.Collections.Generic;
using Xunit;
using YamlDotNet.Serialization;
#pragma warning disable CS8625 // Cannot convert null literal to non-nullable reference type.

namespace YamlConverter.Tests
{
Expand Down Expand Up @@ -75,6 +76,21 @@ public void ScalarTestsOfBool(object val)
Assert.Equal(val, val2);
}

[Fact]
public void EmptyYamlTests()
{
Assert.Null(YamlConvert.DeserializeObject<string>(""));
Assert.Null(YamlConvert.DeserializeObject<string?>(""));
Assert.Equal(0, YamlConvert.DeserializeObject<int>(""));
Assert.Null(YamlConvert.DeserializeObject<int?>(""));
Assert.Null(YamlConvert.DeserializeObject<TestData>(""));
Assert.Null(YamlConvert.DeserializeObject<TestData?>(""));
Assert.Null(YamlConvert.DeserializeObject<JObject>(""));
Assert.Null(YamlConvert.DeserializeObject<JArray>(""));
Assert.Null(YamlConvert.DeserializeObject<JToken>(""));
Assert.Null(YamlConvert.DeserializeObject(""));
}

[Fact]
public void JObjectTests()
{
Expand Down Expand Up @@ -260,6 +276,7 @@ public void TestIgnoreDefaults()
Assert.Equal(JsonConvert.SerializeObject(testData.MyObject), JsonConvert.SerializeObject(testData2.MyObject));
}
}
#pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring as nullable.

public class TestData
{
Expand Down
17 changes: 13 additions & 4 deletions YamlConvert/YamlConvert.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public static string SerializeObject(object value, ISerializer serializer = null
/// <param name="jsonSerializer">JsonSerializer to use for controlling how to serialize JSON objects</param>
/// <param name="serializer">optional serializer</param>
/// <returns>yaml string</returns>
public static string SerializeObject(object value, JsonSerializerSettings jsonSettings, ISerializer serializer = null)
public static string SerializeObject(object value, JsonSerializerSettings jsonSettings, ISerializer serializer = null)
{
serializer = serializer ?? DefaultSerializer;
return serializer.Serialize(JToken.FromObject(value, JsonSerializer.Create(jsonSettings)));
Expand Down Expand Up @@ -67,7 +67,10 @@ public static object DeserializeObject(string yaml, JsonSerializerSettings jsonS
public static T DeserializeObject<T>(string yaml, IDeserializer deserializer = null)
{
deserializer = deserializer ?? DefaultDeserializer;
return deserializer.Deserialize<JToken>(yaml).ToObject<T>();
var token = deserializer.Deserialize<JToken>(yaml);
if (token != null)
return token.ToObject<T>();
return default;
}

/// <summary>
Expand All @@ -81,7 +84,10 @@ public static T DeserializeObject<T>(string yaml, JsonSerializerSettings jsonSet
{
deserializer = deserializer ?? DefaultDeserializer;

return deserializer.Deserialize<JToken>(yaml).ToObject<T>(JsonSerializer.Create(jsonSettings));
var token = deserializer.Deserialize<JToken>(yaml);
if (token != null)
return token.ToObject<T>(JsonSerializer.Create(jsonSettings));
return default;
}

/// <summary>
Expand All @@ -95,7 +101,10 @@ public static T DeserializeObject<T>(string yaml, JsonSerializerSettings jsonSet
public static object DeserializeObject(string yaml, Type type, IDeserializer deserializer = null)
{
deserializer = deserializer ?? DefaultDeserializer;
return deserializer.Deserialize<JToken>(yaml).ToObject(type);
var token = deserializer.Deserialize<JToken>(yaml);
if (token != null)
return token.ToObject(type);
return default;
}

}
Expand Down
4 changes: 2 additions & 2 deletions YamlConvert/YamlConvert.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

<PropertyGroup>
<TargetFrameworks>netstandard2.1</TargetFrameworks>
<Version>3.0.0</Version>
<AssemblyVersion>3.0.0.0</AssemblyVersion>
<Version>3.1.0</Version>
<AssemblyVersion>3.1.0.0</AssemblyVersion>
<Description>YamlDotNet Extentension library for JSON.NET objects and annotations.</Description>
<Company>Icicilecreek</Company>
<Authors>Tom Laird-McConnell</Authors>
Expand Down

0 comments on commit dd47f91

Please sign in to comment.