Skip to content

Commit 615b18d

Browse files
author
Oren (electricessence)
committed
Revised to allow optional params.
1 parent 5140c25 commit 615b18d

7 files changed

Lines changed: 37 additions & 24 deletions

File tree

Open.Serialization.Json.Newtonsoft/JsonSerializerFactory.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@ public override IJsonSerializer GetSerializer(IJsonSerializationOptions options
2424

2525
if (options == null) return Default;
2626

27-
if (options.CamelCaseKeys && !options.CamelCaseProperties)
27+
if (options.CamelCaseKeys == true && options.CamelCaseProperties != true)
2828
throw new NotSupportedException("Camel casing keys but not properties is not supported.");
2929

3030
var o = _settings.Clone();
31-
if (options.CamelCaseKeys)
31+
if (options.CamelCaseKeys == true)
3232
{
3333
o.ContractResolver = new DefaultContractResolver
3434
{
@@ -38,18 +38,20 @@ public override IJsonSerializer GetSerializer(IJsonSerializationOptions options
3838
}
3939
};
4040
}
41-
else if (options.CamelCaseProperties)
41+
else if (options.CamelCaseProperties == true)
4242
{
4343
o.ContractResolver = new CamelCasePropertyNamesContractResolver();
4444
}
45-
else
45+
else if (options.CamelCaseProperties == false)
4646
{
4747
o.ContractResolver = new DefaultContractResolver();
4848
}
4949

50+
if(options.OmitNull.HasValue)
51+
o.NullValueHandling = options.OmitNull.Value ? NullValueHandling.Ignore : NullValueHandling.Include;
5052

51-
o.NullValueHandling = options.OmitNull ? NullValueHandling.Ignore : NullValueHandling.Include;
52-
o.Formatting = options.Indent ? Formatting.Indented : Formatting.None;
53+
if (options.OmitNull.HasValue)
54+
o.Formatting = options.Indent.Value ? Formatting.Indented : Formatting.None;
5355

5456
return new JsonSerializerInternal(o);
5557
}

Open.Serialization.Json.Newtonsoft/Open.Serialization.Json.Newtonsoft.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@ Part of the "Open" set of libraries.
1717
<RepositoryUrl>https://github.com/electricessence/Open.Serialization</RepositoryUrl>
1818
<RepositoryType>git</RepositoryType>
1919
<PackageTags>serialization json newtonsoft</PackageTags>
20-
<Version>1.2.1</Version>
20+
<Version>1.2.2</Version>
2121
</PropertyGroup>
2222

2323
<ItemGroup>
2424
<PackageReference Include="Newtonsoft.Json" Version="11.0.1" />
25-
<PackageReference Include="Open.Serialization.Json" Version="1.2.1" />
25+
<PackageReference Include="Open.Serialization.Json" Version="1.2.2" />
2626
</ItemGroup>
2727

2828
</Project>

Open.Serialization.Json.System/JsonSerializerFactory.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@ public override IJsonSerializer GetSerializer(IJsonSerializationOptions options
2727
}
2828

2929
var o = _options.Clone();
30-
o.IgnoreNullValues = options.OmitNull;
31-
o.WriteIndented = options.Indent;
32-
o.DictionaryKeyPolicy = options.CamelCaseKeys ? JsonNamingPolicy.CamelCase : null;
33-
o.PropertyNamingPolicy = options.CamelCaseProperties ? JsonNamingPolicy.CamelCase : null;
30+
o.IgnoreNullValues = options.OmitNull ?? o.IgnoreNullValues;
31+
o.WriteIndented = options.Indent ?? o.WriteIndented;
32+
o.DictionaryKeyPolicy = options.CamelCaseKeys == true ? JsonNamingPolicy.CamelCase : o.DictionaryKeyPolicy;
33+
o.PropertyNamingPolicy = options.CamelCaseProperties == true ? JsonNamingPolicy.CamelCase : o.PropertyNamingPolicy;
3434

3535
return new JsonSerializerInternal(o);
3636
}

Open.Serialization.Json.System/Open.Serialization.Json.System.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ Part of the "Open" set of libraries.
1717
<RepositoryUrl>https://github.com/electricessence/Open.Serialization</RepositoryUrl>
1818
<RepositoryType>git</RepositoryType>
1919
<PackageTags>serialization json stj</PackageTags>
20-
<Version>1.2.1</Version>
20+
<Version>1.2.2</Version>
2121
</PropertyGroup>
2222

2323
<ItemGroup>
24-
<PackageReference Include="Open.Serialization.Json" Version="1.2.1" />
24+
<PackageReference Include="Open.Serialization.Json" Version="1.2.2" />
2525
<PackageReference Include="System.Text.Json" Version="4.6.0" />
2626
</ItemGroup>
2727

Open.Serialization.Json.Utf8Json/JsonSerializerFactory.cs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ public class JsonSerializerFactory : JsonSerializerFactoryBase
1212
public JsonSerializerFactory(IJsonFormatterResolver defaultResolver = null, bool indent = false)
1313
{
1414
_resolver = defaultResolver ?? StandardResolver.Default;
15+
if (_resolver == StandardResolver.ExcludeNullSnakeCase || _resolver == StandardResolver.SnakeCase)
16+
throw new ArgumentOutOfRangeException(nameof(defaultResolver), "Snake case is not supported.");
1517
_indent = indent;
1618
}
1719

@@ -26,12 +28,15 @@ public override IJsonSerializer GetSerializer(IJsonSerializationOptions options
2628
if (options == null)
2729
return Default;
2830

29-
if (options.CamelCaseKeys)
31+
if (options.CamelCaseKeys == true)
3032
throw new NotSupportedException("Utf8Json does not support camel casing keys.");
3133

32-
return options.CamelCaseProperties
33-
? new JsonSerializerInternal(options.OmitNull ? StandardResolver.ExcludeNullCamelCase : StandardResolver.CamelCase, options.Indent)
34-
: new JsonSerializerInternal(options.OmitNull ? StandardResolver.ExcludeNull : StandardResolver.Default, options.Indent);
34+
var omitNull = options.OmitNull == true || _resolver == StandardResolver.ExcludeNull || _resolver == StandardResolver.ExcludeNullCamelCase;
35+
var camelCase = options.CamelCaseProperties == true || _resolver == StandardResolver.CamelCase || _resolver == StandardResolver.ExcludeNullCamelCase;
36+
37+
return camelCase
38+
? new JsonSerializerInternal(omitNull ? StandardResolver.ExcludeNullCamelCase : StandardResolver.CamelCase, options.Indent ?? _indent)
39+
: new JsonSerializerInternal(omitNull ? StandardResolver.ExcludeNull : StandardResolver.Default, options.Indent ?? _indent);
3540
}
3641
}
3742
}

Open.Serialization.Json.Utf8Json/Open.Serialization.Json.Utf8Json.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ Part of the "Open" set of libraries.
1717
<RepositoryUrl>https://github.com/electricessence/Open.Serialization</RepositoryUrl>
1818
<RepositoryType>git</RepositoryType>
1919
<PackageTags>serialization json utf8json</PackageTags>
20-
<Version>1.2.1</Version>
20+
<Version>1.2.2</Version>
2121
</PropertyGroup>
2222

2323
<ItemGroup>
24-
<PackageReference Include="Open.Serialization.Json" Version="1.2.1" />
24+
<PackageReference Include="Open.Serialization.Json" Version="1.2.2" />
2525
<PackageReference Include="Utf8Json" Version="1.3.7" />
2626
</ItemGroup>
2727

Open.Serialization.Tests/Open.Serialization.Tests.csproj

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,16 @@
77
</PropertyGroup>
88

99
<ItemGroup>
10-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.2.0" />
11-
<PackageReference Include="xunit" Version="2.4.0" />
12-
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.0" />
13-
<PackageReference Include="coverlet.collector" Version="1.0.1" />
10+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.3.0" />
11+
<PackageReference Include="xunit" Version="2.4.1" />
12+
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.1">
13+
<PrivateAssets>all</PrivateAssets>
14+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
15+
</PackageReference>
16+
<PackageReference Include="coverlet.collector" Version="1.1.0">
17+
<PrivateAssets>all</PrivateAssets>
18+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
19+
</PackageReference>
1420
</ItemGroup>
1521

1622
<ItemGroup>

0 commit comments

Comments
 (0)