@@ -9,26 +9,89 @@ namespace CommandQuery.Tests.SystemTextJson.Internal
9
9
public class JsonExtensionsTests
10
10
{
11
11
[ LoFu , Test ]
12
- public void SafeDeserialize ( )
12
+ public void SafeDeserialize_string ( )
13
13
{
14
14
void should_return_an_object ( )
15
15
{
16
- "{}" . SafeDeserialize ( typeof ( object ) , null ) . Should ( ) . NotBeNull ( ) ;
16
+ "{}" . SafeDeserialize ( typeof ( object ) ) . Should ( ) . NotBeNull ( ) ;
17
17
18
18
JsonSerializer . Serialize ( TestData . FakeComplexQuery )
19
- . SafeDeserialize ( typeof ( FakeComplexQuery ) , null )
19
+ . SafeDeserialize ( typeof ( FakeComplexQuery ) )
20
20
. Should ( ) . BeEquivalentTo ( TestData . FakeComplexQuery ) ;
21
21
22
22
JsonSerializer . Serialize ( TestData . FakeDateTimeQuery )
23
- . SafeDeserialize ( typeof ( FakeDateTimeQuery ) , null )
23
+ . SafeDeserialize ( typeof ( FakeDateTimeQuery ) )
24
24
. Should ( ) . BeEquivalentTo ( TestData . FakeDateTimeQuery ) ;
25
25
26
26
JsonSerializer . Serialize ( TestData . FakeNestedQuery )
27
- . SafeDeserialize ( typeof ( FakeNestedQuery ) , null )
27
+ . SafeDeserialize ( typeof ( FakeNestedQuery ) )
28
28
. Should ( ) . BeEquivalentTo ( TestData . FakeNestedQuery ) ;
29
29
}
30
30
31
- void should_return_null_if_deserialization_fails ( ) => ( ( string ) null ) . SafeDeserialize ( typeof ( object ) , null ) . Should ( ) . BeNull ( ) ;
31
+ void should_have_sane_defaults ( )
32
+ {
33
+ var result = "{\" int32\" :\" 1\" }" . SafeDeserialize ( typeof ( FakeComplexQuery ) ) as FakeComplexQuery ;
34
+ result . Int32 . Should ( ) . Be ( 1 ) ;
35
+ }
36
+
37
+ void should_use_options_when_provided ( )
38
+ {
39
+ var options = new JsonSerializerOptions ( JsonSerializerDefaults . Web ) ;
40
+ var result = "{\" int32\" :\" 1\" }" . SafeDeserialize ( typeof ( FakeComplexQuery ) , options ) as FakeComplexQuery ;
41
+ result . Int32 . Should ( ) . Be ( 1 ) ;
42
+ }
43
+
44
+ void should_return_null_if_deserialization_fails ( ) => ( ( string ) null ) . SafeDeserialize ( typeof ( object ) ) . Should ( ) . BeNull ( ) ;
45
+ }
46
+
47
+ [ LoFu , Test ]
48
+ public void SafeDeserialize_Dictionary ( )
49
+ {
50
+ void should_set_the_property_values ( )
51
+ {
52
+ var subject = TestData . FakeComplexQuery_As_Dictionary_Of_String_Object ;
53
+ var result = subject . SafeDeserialize ( typeof ( FakeComplexQuery ) ) as FakeComplexQuery ;
54
+ result . Should ( ) . BeEquivalentTo ( TestData . FakeComplexQuery ) ;
55
+
56
+ subject = TestData . FakeComplexQuery_As_Dictionary_Of_String_Object . ToDictionary ( x => x . Key . ToLower ( ) , x => x . Value ) ;
57
+ result = subject . SafeDeserialize ( typeof ( FakeComplexQuery ) ) as FakeComplexQuery ;
58
+ result . Should ( ) . BeEquivalentTo ( TestData . FakeComplexQuery ) ;
59
+ }
60
+
61
+ void should_set_the_property_values_of_DateTime_kinds ( )
62
+ {
63
+ var subject = TestData . FakeDateTimeQuery_As_Dictionary_Of_String_Object ;
64
+
65
+ var result = subject . SafeDeserialize ( typeof ( FakeDateTimeQuery ) ) as FakeDateTimeQuery ;
66
+
67
+ result . Should ( ) . BeEquivalentTo ( TestData . FakeDateTimeQuery ) ;
68
+ }
69
+
70
+ void should_not_set_the_property_values_of_nested_objects ( )
71
+ {
72
+ var subject = TestData . FakeNestedQuery_As_Dictionary_Of_String_Object ;
73
+
74
+ var result = subject . SafeDeserialize ( typeof ( FakeNestedQuery ) ) as FakeNestedQuery ;
75
+
76
+ result . Should ( ) . BeEquivalentTo ( TestData . FakeNestedQuery ) ;
77
+ }
78
+
79
+ void should_return_null_if_dictionary_is_null ( )
80
+ {
81
+ IDictionary < string , object > subject = null ;
82
+
83
+ subject . SafeDeserialize ( typeof ( FakeComplexQuery ) ) . Should ( ) . BeNull ( ) ;
84
+ }
85
+
86
+ void should_return_null_if_conversion_fails ( )
87
+ {
88
+ var subject = new Dictionary < string , object >
89
+ {
90
+ { "Guid" , "fail" }
91
+ } ;
92
+
93
+ subject . SafeDeserialize ( typeof ( FakeComplexQuery ) ) . Should ( ) . BeNull ( ) ;
94
+ }
32
95
}
33
96
}
34
97
}
0 commit comments