Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit 2805248

Browse files
committed
Add test for deserializing case-insensitive names
1 parent d376d3f commit 2805248

File tree

2 files changed

+131
-108
lines changed

2 files changed

+131
-108
lines changed

tests/ServiceStack.Text.Tests/AdhocModelTests.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -679,6 +679,16 @@ public void DumpFail()
679679
Console.WriteLine(arrayOfA.Dump());
680680
}
681681

682+
[Test]
683+
public void Can_deserialize_case_insensitive_names()
684+
{
685+
var dto = "{\"vALUE\":\"B\"}".FromJson<A>();
686+
Assert.That(dto.Value, Is.EqualTo("B"));
687+
688+
dto = "{vALUE:B}".FromJsv<A>();
689+
Assert.That(dto.Value, Is.EqualTo("B"));
690+
}
691+
682692
[Test]
683693
public void Deserialize_array_with_null_elements()
684694
{

tests/ServiceStack.Text.Tests/JsonTests/BasicPropertiesTests.cs

Lines changed: 121 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -4,160 +4,173 @@
44
using System.Text;
55
using NUnit.Framework;
66

7-
namespace ServiceStack.Text.Tests.JsonTests {
8-
#region Test case types
9-
10-
public class ContainsIDictionary {
11-
public IDictionary Container { get; set; }
12-
}
13-
public class ContainsGenericStringDictionary {
14-
public Dictionary<string, string> Container { get; set; }
15-
}
16-
17-
public class SeveralTypesOfDictionary {
18-
public IDictionary GuidToInt { get; set; }
19-
public IDictionary DateTimeTo_DictStrStr { get; set; }
20-
}
21-
22-
#endregion
23-
24-
[TestFixture]
25-
public class BasicPropertiesTests {
26-
[Test]
27-
public void Generic_dictionary_backed_IDictionary_round_trips_ok () {
28-
var original = new ContainsIDictionary {
29-
Container = new Dictionary<string, string>
7+
namespace ServiceStack.Text.Tests.JsonTests
8+
{
9+
public class ContainsIDictionary
10+
{
11+
public IDictionary Container { get; set; }
12+
}
13+
public class ContainsGenericStringDictionary
14+
{
15+
public Dictionary<string, string> Container { get; set; }
16+
}
17+
18+
public class SeveralTypesOfDictionary
19+
{
20+
public IDictionary GuidToInt { get; set; }
21+
public IDictionary DateTimeTo_DictStrStr { get; set; }
22+
}
23+
24+
[TestFixture]
25+
public class BasicPropertiesTests
26+
{
27+
[Test]
28+
public void Generic_dictionary_backed_IDictionary_round_trips_ok()
29+
{
30+
var original = new ContainsIDictionary
31+
{
32+
Container = new Dictionary<string, string>
3033
{
3134
{"one", "header one"},
3235
{"two", "header two"}
3336
}
34-
};
37+
};
3538

36-
var str = JsonSerializer.SerializeToString(original);
37-
var obj = JsonSerializer.DeserializeFromString<ContainsIDictionary>(str);
39+
var str = JsonSerializer.SerializeToString(original);
40+
var obj = JsonSerializer.DeserializeFromString<ContainsIDictionary>(str);
3841

39-
Console.WriteLine(DictStr(obj.Container));
40-
Assert.That(DictStr(obj.Container), Is.EqualTo(DictStr(original.Container)));
41-
}
42+
Console.WriteLine(DictStr(obj.Container));
43+
Assert.That(DictStr(obj.Container), Is.EqualTo(DictStr(original.Container)));
44+
}
4245

43-
[Test]
44-
public void Generic_dictionary_backed_IDictionary_deserialises_to_generic_dictionary () {
45-
var original = new ContainsIDictionary // Using IDictionary backing
46-
{
47-
Container = new Dictionary<string, string>
46+
[Test]
47+
public void Generic_dictionary_backed_IDictionary_deserialises_to_generic_dictionary()
48+
{
49+
var original = new ContainsIDictionary // Using IDictionary backing
50+
{
51+
Container = new Dictionary<string, string>
4852
{
4953
{"one", "header one"},
5054
{"two", "header two"}
5155
}
52-
};
56+
};
5357

54-
var str = JsonSerializer.SerializeToString(original);
55-
var obj = JsonSerializer.DeserializeFromString<ContainsGenericStringDictionary>(str); // decoding to Dictionary<,>
58+
var str = JsonSerializer.SerializeToString(original);
59+
var obj = JsonSerializer.DeserializeFromString<ContainsGenericStringDictionary>(str); // decoding to Dictionary<,>
5660

57-
Console.WriteLine(DictStr(obj.Container));
58-
Assert.That(DictStr(obj.Container), Is.EqualTo(DictStr(original.Container)));
59-
}
61+
Console.WriteLine(DictStr(obj.Container));
62+
Assert.That(DictStr(obj.Container), Is.EqualTo(DictStr(original.Container)));
63+
}
6064

61-
[Test]
62-
public void Generic_dictionary_deserialises_to_IDictionary () {
63-
var original = new ContainsGenericStringDictionary // Using Dictionary<,> backing
64-
{
65-
Container = new Dictionary<string, string>
65+
[Test]
66+
public void Generic_dictionary_deserialises_to_IDictionary()
67+
{
68+
var original = new ContainsGenericStringDictionary // Using Dictionary<,> backing
69+
{
70+
Container = new Dictionary<string, string>
6671
{
6772
{"one", "header one"},
6873
{"two", "header two"}
6974
}
70-
};
75+
};
7176

72-
var str = JsonSerializer.SerializeToString(original);
73-
var obj = JsonSerializer.DeserializeFromString<ContainsIDictionary>(str); // decoding to IDictionary
77+
var str = JsonSerializer.SerializeToString(original);
78+
var obj = JsonSerializer.DeserializeFromString<ContainsIDictionary>(str); // decoding to IDictionary
7479

75-
Console.WriteLine(DictStr(obj.Container));
76-
Assert.That(DictStr(obj.Container), Is.EqualTo(DictStr(original.Container)));
77-
}
80+
Console.WriteLine(DictStr(obj.Container));
81+
Assert.That(DictStr(obj.Container), Is.EqualTo(DictStr(original.Container)));
82+
}
7883

79-
[Test]
80-
public void Generic_dictionary_round_trips_ok () {
81-
var original = new ContainsGenericStringDictionary {
82-
Container = new Dictionary<string, string>
84+
[Test]
85+
public void Generic_dictionary_round_trips_ok()
86+
{
87+
var original = new ContainsGenericStringDictionary
88+
{
89+
Container = new Dictionary<string, string>
8390
{
8491
{"one", "header one"},
8592
{"two", "header two"}
8693
}
87-
};
94+
};
8895

89-
var str = JsonSerializer.SerializeToString(original);
90-
var obj = JsonSerializer.DeserializeFromString<ContainsGenericStringDictionary>(str);
96+
var str = JsonSerializer.SerializeToString(original);
97+
var obj = JsonSerializer.DeserializeFromString<ContainsGenericStringDictionary>(str);
9198

92-
Console.WriteLine(DictStr(obj.Container));
93-
Assert.That(DictStr(obj.Container), Is.EqualTo(DictStr(original.Container)));
94-
}
99+
Console.WriteLine(DictStr(obj.Container));
100+
Assert.That(DictStr(obj.Container), Is.EqualTo(DictStr(original.Container)));
101+
}
95102

96-
[Test]
97-
public void Generic_dictionary_and_IDictionary_serialise_the_same () {
98-
JsConfig.PreferInterfaces = true;
99-
JsConfig.ExcludeTypeInfo = false;
100-
JsConfig.ConvertObjectTypesIntoStringDictionary = false;
103+
[Test]
104+
public void Generic_dictionary_and_IDictionary_serialise_the_same()
105+
{
106+
JsConfig.PreferInterfaces = true;
107+
JsConfig.ExcludeTypeInfo = false;
108+
JsConfig.ConvertObjectTypesIntoStringDictionary = false;
101109

102-
var genericStringDictionary = new ContainsGenericStringDictionary {
103-
Container = new Dictionary<string, string>
110+
var genericStringDictionary = new ContainsGenericStringDictionary
111+
{
112+
Container = new Dictionary<string, string>
104113
{
105114
{"one", "header one"},
106115
{"two", "header two"}
107116
}
108-
};
109-
var iDictionary = new ContainsIDictionary {
110-
Container = new Dictionary<string, string>
117+
};
118+
var iDictionary = new ContainsIDictionary
119+
{
120+
Container = new Dictionary<string, string>
111121
{
112122
{"one", "header one"},
113123
{"two", "header two"}
114124
}
115-
};
125+
};
116126

117-
var genDict = genericStringDictionary.ToJson();
118-
var iDict = iDictionary.ToJson();
127+
var genDict = genericStringDictionary.ToJson();
128+
var iDict = iDictionary.ToJson();
119129

120-
Console.WriteLine("Dictionary<string,string> --> " + genDict);
121-
Console.WriteLine();
122-
Console.WriteLine("IDictionary --> " + iDict);
130+
Console.WriteLine("Dictionary<string,string> --> " + genDict);
131+
Console.WriteLine();
132+
Console.WriteLine("IDictionary --> " + iDict);
123133

124-
Assert.That(genDict, Is.EqualTo(iDict));
125-
}
134+
Assert.That(genDict, Is.EqualTo(iDict));
135+
}
126136

127-
[Test]
128-
[Ignore("Very complex mappings, not needed for most tasks.")]
129-
public void Complex_dictionaries_round_trip () {
130-
var original = new SeveralTypesOfDictionary {
131-
GuidToInt = new Dictionary<Guid, int>
137+
[Test]
138+
[Ignore("Very complex mappings, not needed for most tasks.")]
139+
public void Complex_dictionaries_round_trip()
140+
{
141+
var original = new SeveralTypesOfDictionary
142+
{
143+
GuidToInt = new Dictionary<Guid, int>
132144
{
133145
{Guid.Empty, 10},
134146
{Guid.NewGuid(), 25}
135147
},
136-
DateTimeTo_DictStrStr = new Dictionary<DateTime, Dictionary<string, string>> {
148+
DateTimeTo_DictStrStr = new Dictionary<DateTime, Dictionary<string, string>> {
137149
{DateTime.Today, new Dictionary<string, string> {{"a","b"},{"c","d"}}},
138150
{DateTime.Now, new Dictionary<string, string> {{"a","b"},{"c","d"}}}
139151
}
140-
};
141-
// see WriteDictionary.cs line 105
142-
// Problems:
143-
// - Int is turning into String on Deserialise
144-
// - Dictionary of dictionaries is totally failing on Deserialise
145-
var string_a = original.ToJson();
146-
var copy_a = string_a.FromJson<SeveralTypesOfDictionary>();
147-
var string_b = copy_a.ToJson();
148-
var copy_b = string_b.FromJson<SeveralTypesOfDictionary>();
149-
150-
Console.WriteLine(string_a);
151-
Console.WriteLine(string_b);
152-
Assert.That(copy_a.GuidToInt[Guid.Empty], Is.EqualTo(10), "First copy was incorrect");
153-
Assert.That(copy_b.GuidToInt[Guid.Empty], Is.EqualTo(10), "Second copy was incorrect");
154-
Assert.That(string_a, Is.EqualTo(string_b), "Serialised forms not same");
155-
}
156-
157-
static string DictStr (IDictionary d) {
158-
var sb = new StringBuilder();
159-
foreach (var key in d.Keys) { sb.AppendLine(key + " = " + d[key]); }
160-
return sb.ToString();
161-
}
162-
}
152+
};
153+
// see WriteDictionary.cs line 105
154+
// Problems:
155+
// - Int is turning into String on Deserialise
156+
// - Dictionary of dictionaries is totally failing on Deserialise
157+
var string_a = original.ToJson();
158+
var copy_a = string_a.FromJson<SeveralTypesOfDictionary>();
159+
var string_b = copy_a.ToJson();
160+
var copy_b = string_b.FromJson<SeveralTypesOfDictionary>();
161+
162+
Console.WriteLine(string_a);
163+
Console.WriteLine(string_b);
164+
Assert.That(copy_a.GuidToInt[Guid.Empty], Is.EqualTo(10), "First copy was incorrect");
165+
Assert.That(copy_b.GuidToInt[Guid.Empty], Is.EqualTo(10), "Second copy was incorrect");
166+
Assert.That(string_a, Is.EqualTo(string_b), "Serialised forms not same");
167+
}
168+
169+
static string DictStr(IDictionary d)
170+
{
171+
var sb = new StringBuilder();
172+
foreach (var key in d.Keys) { sb.AppendLine(key + " = " + d[key]); }
173+
return sb.ToString();
174+
}
175+
}
163176
}

0 commit comments

Comments
 (0)