Skip to content

Commit cb83885

Browse files
committed
Add unit tests for list deserialization and enhance ArrayReflectionConvertor with ParseElementToMember method
1 parent fc57b26 commit cb83885

3 files changed

Lines changed: 103 additions & 0 deletions

File tree

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
using System.Collections.Generic;
2+
using Xunit;
3+
using Xunit.Abstractions;
4+
using com.IvanMurzak.ReflectorNet.Utils;
5+
6+
namespace com.IvanMurzak.ReflectorNet.Tests.Utils
7+
{
8+
public class ListSerializationTests : BaseTest
9+
{
10+
public ListSerializationTests(ITestOutputHelper output) : base(output) { }
11+
12+
public class ClassWithList
13+
{
14+
public List<int>? IntList { get; set; }
15+
}
16+
17+
[Fact]
18+
public void TestListDeserialization()
19+
{
20+
var original = new ClassWithList { IntList = new List<int> { 1, 2, 3 } };
21+
var reflector = new Reflector();
22+
var serialized = reflector.Serialize(original);
23+
var deserialized = reflector.Deserialize<ClassWithList>(serialized);
24+
25+
Assert.NotNull(deserialized);
26+
Assert.NotNull(deserialized.IntList);
27+
Assert.Equal(original.IntList.Count, deserialized.IntList.Count);
28+
Assert.Equal(original.IntList[0], deserialized.IntList[0]);
29+
}
30+
}
31+
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
using System.Collections.Generic;
2+
using System.Text.Json;
3+
using Xunit;
4+
using Xunit.Abstractions;
5+
using com.IvanMurzak.ReflectorNet.Model;
6+
using com.IvanMurzak.ReflectorNet.Utils;
7+
8+
namespace com.IvanMurzak.ReflectorNet.Tests.Utils
9+
{
10+
public class PlainJsonArrayTest : BaseTest
11+
{
12+
public PlainJsonArrayTest(ITestOutputHelper output) : base(output) { }
13+
14+
[Fact]
15+
public void TestPlainJsonArrayDeserialization()
16+
{
17+
var json = "[1, 2, 3]";
18+
using var doc = JsonDocument.Parse(json);
19+
var root = doc.RootElement;
20+
21+
var serializedMember = new SerializedMember
22+
{
23+
typeName = "System.Collections.Generic.List`1[[System.Int32]]",
24+
valueJsonElement = root
25+
};
26+
27+
var reflector = new Reflector();
28+
var result = reflector.Deserialize<List<int>>(serializedMember);
29+
30+
Assert.NotNull(result);
31+
Assert.Equal(3, result.Count);
32+
Assert.Equal(1, result[0]);
33+
Assert.Equal(2, result[1]);
34+
Assert.Equal(3, result[2]);
35+
}
36+
37+
[Fact]
38+
public void TestSerializedMemberArrayDeserialization()
39+
{
40+
// Construct a JSON that looks like what Reflector produces
41+
// Array of SerializedMember objects
42+
var json = @"[
43+
{ ""typeName"": ""System.Int32"", ""value"": 1 },
44+
{ ""typeName"": ""System.Int32"", ""value"": 2 }
45+
]";
46+
using var doc = JsonDocument.Parse(json);
47+
var root = doc.RootElement;
48+
49+
var serializedMember = new SerializedMember
50+
{
51+
typeName = "System.Collections.Generic.List`1[[System.Int32]]",
52+
valueJsonElement = root
53+
};
54+
55+
var reflector = new Reflector();
56+
var result = reflector.Deserialize<List<int>>(serializedMember);
57+
58+
Assert.NotNull(result);
59+
Assert.Equal(2, result.Count);
60+
Assert.Equal(1, result[0]);
61+
Assert.Equal(2, result[1]);
62+
}
63+
}
64+
}

ReflectorNet/src/Convertor/Reflection/ArrayReflectionConvertor.Deserialize.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,14 @@ protected virtual bool TryDeserializeValueListInternal(
386386
}
387387
}
388388

389+
/// <summary>
390+
/// Converts a JsonElement from an array into a SerializedMember for deserialization.
391+
/// </summary>
392+
/// <param name="element">The JSON element to parse</param>
393+
/// <returns>
394+
/// A SerializedMember containing the element's type information and value,
395+
/// or a minimal SerializedMember with just the valueJsonElement if parsing fails.
396+
/// </returns>
389397
protected virtual SerializedMember ParseElementToMember(JsonElement element)
390398
{
391399
SerializedMember? member = null;

0 commit comments

Comments
 (0)