Skip to content

Commit 811610e

Browse files
authored
Merge pull request #42 from IvanMurzak/fix/serialization
Enhance serialization handling for non-serialized fields
2 parents f9d3c3b + a3f54af commit 811610e

52 files changed

Lines changed: 4878 additions & 47 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

ConsoleApp/Program.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,13 @@
1717
var reflector = new Reflector();
1818
var methodInfo = typeof(Sample).GetMethod(nameof(Sample.Command));
1919

20-
var argumentsSchema = reflector.GetArgumentsSchema(methodInfo);
21-
var outputSchema = reflector.GetReturnSchema(methodInfo);
20+
var argumentsSchema = reflector.GetArgumentsSchema(methodInfo!);
21+
var outputSchema = reflector.GetReturnSchema(methodInfo!);
2222

2323
Console.WriteLine("Arguments Schema:");
2424
Console.WriteLine(argumentsSchema.ToJsonString(new System.Text.Json.JsonSerializerOptions { WriteIndented = true }));
2525
Console.WriteLine("Output Schema:");
26-
Console.WriteLine(outputSchema.ToJsonString(new System.Text.Json.JsonSerializerOptions { WriteIndented = true }));
26+
Console.WriteLine(outputSchema?.ToJsonString(new System.Text.Json.JsonSerializerOptions { WriteIndented = true }));
2727

2828
var schemaJson = reflector.GetSchema<GameState<PlayerProfile>>();
2929

@@ -44,8 +44,8 @@ public class Data
4444
{
4545
public int? optionalInt;
4646
[Description("THIS IS THE DEMO DESCRIPTION.")]
47-
public string address;
48-
public List<Data> list; // recursive
47+
public string address = null!;
48+
public List<Data> list = null!; // recursive
4949
}
5050

5151
public struct Result
@@ -74,15 +74,15 @@ public struct GeoPoint
7474
public class PlayerProfile
7575
{
7676
public Guid Id { get; set; }
77-
public string Username { get; set; }
78-
public string[] Badges { get; set; } // Array
79-
public Dictionary<string, int> Stats { get; set; } // Dictionary
77+
public string Username { get; set; } = null!;
78+
public string[] Badges { get; set; } = null!; // Array
79+
public Dictionary<string, int> Stats { get; set; } = null!; // Dictionary
8080
}
8181

8282
// A generic wrapper (common in Game State or API responses)
8383
public class GameState<T>
8484
{
8585
public long Timestamp { get; set; }
86-
public T Player { get; set; }
87-
public List<GeoPoint> Checkpoints { get; set; } // List of Structs
86+
public T Player { get; set; } = default!;
87+
public List<GeoPoint> Checkpoints { get; set; } = null!; // List of Structs
8888
}
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
using System;
2+
using System.Text.Json;
3+
using Xunit;
4+
using Xunit.Abstractions;
5+
6+
namespace com.IvanMurzak.ReflectorNet.Tests.JsonConverterTests
7+
{
8+
/// <summary>
9+
/// Tests for Bool and Char JSON converters
10+
/// </summary>
11+
public class BasicTypesConverterTests : BaseTest
12+
{
13+
private readonly Reflector _reflector;
14+
15+
public BasicTypesConverterTests(ITestOutputHelper output) : base(output)
16+
{
17+
_reflector = new Reflector();
18+
}
19+
20+
#region BoolJsonConverter Tests
21+
22+
[Fact]
23+
public void Bool_Serialize_True()
24+
{
25+
var value = true;
26+
var json = _reflector.JsonSerializer.Serialize(value);
27+
Assert.Equal("true", json);
28+
}
29+
30+
[Fact]
31+
public void Bool_Serialize_False()
32+
{
33+
var value = false;
34+
var json = _reflector.JsonSerializer.Serialize(value);
35+
Assert.Equal("false", json);
36+
}
37+
38+
[Fact]
39+
public void Bool_Deserialize_True()
40+
{
41+
var json = "true";
42+
var result = _reflector.JsonSerializer.Deserialize<bool>(json);
43+
Assert.True(result);
44+
}
45+
46+
[Fact]
47+
public void Bool_Deserialize_False()
48+
{
49+
var json = "false";
50+
var result = _reflector.JsonSerializer.Deserialize<bool>(json);
51+
Assert.False(result);
52+
}
53+
54+
[Fact]
55+
public void Bool_Deserialize_FromString()
56+
{
57+
var json = "\"true\"";
58+
var result = _reflector.JsonSerializer.Deserialize<bool>(json);
59+
Assert.True(result);
60+
}
61+
62+
#endregion
63+
64+
#region CharJsonConverter Tests
65+
66+
[Fact]
67+
public void Char_Serialize_Value()
68+
{
69+
var value = 'A';
70+
var json = _reflector.JsonSerializer.Serialize(value);
71+
Assert.Equal("\"A\"", json);
72+
}
73+
74+
[Fact]
75+
public void Char_Deserialize_Value()
76+
{
77+
var json = "\"B\"";
78+
var result = _reflector.JsonSerializer.Deserialize<char>(json);
79+
Assert.Equal('B', result);
80+
}
81+
82+
[Fact]
83+
public void Char_Deserialize_FromNumber()
84+
{
85+
var json = "65";
86+
var result = _reflector.JsonSerializer.Deserialize<char>(json);
87+
Assert.Equal('A', result);
88+
}
89+
90+
#endregion
91+
}
92+
}
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
using System;
2+
using System.Numerics;
3+
using System.Text.Json;
4+
using Xunit;
5+
using Xunit.Abstractions;
6+
7+
namespace com.IvanMurzak.ReflectorNet.Tests.JsonConverterTests
8+
{
9+
/// <summary>
10+
/// Tests for BigInteger JSON converter
11+
/// </summary>
12+
public class BigIntegerConverterTests : BaseTest
13+
{
14+
private readonly Reflector _reflector;
15+
16+
public BigIntegerConverterTests(ITestOutputHelper output) : base(output)
17+
{
18+
_reflector = new Reflector();
19+
}
20+
21+
#region BigIntegerJsonConverter Tests
22+
23+
[Fact]
24+
public void BigInteger_Serialize_Value()
25+
{
26+
var value = BigInteger.Parse("123456789012345678901234567890");
27+
var json = _reflector.JsonSerializer.Serialize(value);
28+
_output.WriteLine($"BigInteger value: {json}");
29+
Assert.Contains("123456789012345678901234567890", json);
30+
}
31+
32+
[Fact]
33+
public void BigInteger_Serialize_Zero()
34+
{
35+
var value = BigInteger.Zero;
36+
var json = _reflector.JsonSerializer.Serialize(value);
37+
_output.WriteLine($"BigInteger zero: {json}");
38+
Assert.Equal("\"0\"", json);
39+
}
40+
41+
[Fact]
42+
public void BigInteger_Serialize_Negative()
43+
{
44+
var value = BigInteger.Parse("-98765432109876543210");
45+
var json = _reflector.JsonSerializer.Serialize(value);
46+
_output.WriteLine($"BigInteger negative: {json}");
47+
Assert.Contains("-98765432109876543210", json);
48+
}
49+
50+
[Fact]
51+
public void BigInteger_Deserialize_FromNumber()
52+
{
53+
var json = "12345678901234567890";
54+
var result = _reflector.JsonSerializer.Deserialize<BigInteger>(json);
55+
_output.WriteLine($"BigInteger from number: {result}");
56+
Assert.Equal(BigInteger.Parse("12345678901234567890"), result);
57+
}
58+
59+
[Fact]
60+
public void BigInteger_Deserialize_FromString()
61+
{
62+
var json = "\"999999999999999999999999999999\"";
63+
var result = _reflector.JsonSerializer.Deserialize<BigInteger>(json);
64+
_output.WriteLine($"BigInteger from string: {result}");
65+
Assert.Equal(BigInteger.Parse("999999999999999999999999999999"), result);
66+
}
67+
68+
[Fact]
69+
public void BigInteger_RoundTrip()
70+
{
71+
var original = BigInteger.Pow(2, 100);
72+
var json = _reflector.JsonSerializer.Serialize(original);
73+
var deserialized = _reflector.JsonSerializer.Deserialize<BigInteger>(json);
74+
_output.WriteLine($"BigInteger roundtrip: {original} -> {json} -> {deserialized}");
75+
Assert.Equal(original, deserialized);
76+
}
77+
78+
#endregion
79+
}
80+
}

0 commit comments

Comments
 (0)