Skip to content

Commit 24ee97f

Browse files
committed
Fixed that mysterious serialization issue
1 parent e763803 commit 24ee97f

24 files changed

+1978
-2035
lines changed

src/RestSharp.Serializers.SimpleJson/SimpleJson.cs

Lines changed: 1903 additions & 1951 deletions
Large diffs are not rendered by default.

src/RestSharp/Extensions/StringExtensions.cs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -274,11 +274,11 @@ public static string AddDashes(this string pascalCasedWord)
274274
);
275275

276276
/// <summary>
277-
/// Add an undescore prefix to a pascasl-cased string
277+
/// Add an underscore prefix to a pascal-cased string
278278
/// </summary>
279279
/// <param name="pascalCasedWord"></param>
280280
/// <returns></returns>
281-
public static string AddUnderscorePrefix(this string pascalCasedWord) => string.Format("_{0}", pascalCasedWord);
281+
public static string AddUnderscorePrefix(this string pascalCasedWord) => $"_{pascalCasedWord}";
282282

283283
/// <summary>
284284
/// Add spaces to a pascal-cased string
@@ -332,9 +332,15 @@ public static IEnumerable<string> GetNameVariants(this string name, CultureInfo
332332
// try name with underscore prefix
333333
yield return name.AddUnderscorePrefix();
334334

335-
// try name with underscore prefix, using camel case
335+
// try name with proper camel case
336+
yield return name.AddUnderscores().ToCamelCase(culture);
337+
338+
// try name with underscore prefix, using proper camel case
336339
yield return name.ToCamelCase(culture).AddUnderscorePrefix();
337340

341+
// try name with underscore prefix, using camel case
342+
yield return name.AddUnderscores().ToCamelCase(culture).AddUnderscorePrefix();
343+
338344
// try name with spaces
339345
yield return name.AddSpaces();
340346

src/RestSharp/Serializers/Json/JsonSerializer.cs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -124,9 +124,8 @@ object Map(object target, IDictionary<string, object> data)
124124

125125
for (var i = 0; i < parts.Length; ++i)
126126
{
127-
var actualName = parts[i]
128-
.GetNameVariants(Culture)
129-
.FirstOrDefault(currentData.ContainsKey);
127+
var variants = parts[i].GetNameVariants(Culture).Distinct();
128+
var actualName = variants.FirstOrDefault(currentData.ContainsKey);
130129

131130
if (actualName == null) break;
132131

@@ -322,9 +321,7 @@ object CreateAndMap(Type type, object element)
322321
{
323322
var instance = Activator.CreateInstance(type);
324323

325-
Map(instance, (IDictionary<string, object>) element);
326-
327-
return instance;
324+
return Map(instance, (IDictionary<string, object>) element);
328325
}
329326
}
330327

test/RestSharp.Tests/JsonTests.cs

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ static T GetPayLoad<T>(string fileName)
3131
[Test]
3232
public void Can_Deserialize_4sq_Json_With_Root_Element_Specified()
3333
{
34-
var doc = File.ReadAllText(Path.Combine(CurrentPath, "SampleData", "4sq.txt"));
34+
var doc = File.ReadAllText(Path.Combine(CurrentPath, "SampleData", "4sq.json"));
3535
var serializer = new JsonSerializer {RootElement = "response"};
3636
var output = serializer.Deserialize<VenuesResponse>(new RestResponse {Content = doc});
3737

@@ -78,7 +78,7 @@ public void Can_Deserialize_Date_With_Milliseconds()
7878
[Test]
7979
public void Can_Deserialize_DateTime()
8080
{
81-
var payload = GetPayLoad<DateTimeTestStructure>("datetimes.txt");
81+
var payload = GetPayLoad<DateTimeTestStructure>("datetimes.json");
8282

8383
Assert.AreEqual(
8484
new DateTime(2011, 6, 30, 8, 15, 46, 929, DateTimeKind.Utc),
@@ -108,7 +108,7 @@ public void Can_Deserialize_DateTime_With_DateTimeStyles()
108108
[Test]
109109
public void Can_Deserialize_DateTimeOffset()
110110
{
111-
var payload = GetPayLoad<DateTimeTestStructure>("datetimes.txt");
111+
var payload = GetPayLoad<DateTimeTestStructure>("datetimes.json");
112112

113113
Assert.AreEqual(
114114
new DateTime(2011, 6, 30, 8, 15, 46, 929, DateTimeKind.Utc).ToString("yyyy-MM-dd HH:mm:ss.fff"),
@@ -130,7 +130,7 @@ public void Can_Deserialize_Decimal_With_Four_Zeros_After_Floating_Point()
130130
[Test]
131131
public void Can_Deserialize_Dictionary_of_Lists()
132132
{
133-
var doc = File.ReadAllText(Path.Combine(CurrentPath, "SampleData", "jsondictionary.txt"));
133+
var doc = File.ReadAllText(Path.Combine(CurrentPath, "SampleData", "jsondictionary.json"));
134134
var serializer = new JsonSerializer {RootElement = "response"};
135135
var output = serializer.Deserialize<EmployeeTracker>(new RestResponse {Content = doc});
136136

@@ -142,7 +142,7 @@ public void Can_Deserialize_Dictionary_of_Lists()
142142
[Test]
143143
public void Can_Deserialize_Dictionary_with_Null()
144144
{
145-
var doc = File.ReadAllText(Path.Combine(CurrentPath, "SampleData", "jsondictionary_null.txt"));
145+
var doc = File.ReadAllText(Path.Combine(CurrentPath, "SampleData", "jsondictionary_null.json"));
146146
var serializer = new JsonSerializer {RootElement = "response"};
147147

148148
IDictionary<string, object> output =
@@ -156,7 +156,7 @@ public void Can_Deserialize_Dictionary_with_Null()
156156
[Test]
157157
public void Can_Deserialize_Dot_Field()
158158
{
159-
var data = File.ReadAllText(Path.Combine(CurrentPath, "SampleData", "bearertoken.txt"));
159+
var data = File.ReadAllText(Path.Combine(CurrentPath, "SampleData", "bearertoken.json"));
160160
var response = new RestResponse {Content = data};
161161
var serializer = new JsonSerializer();
162162
var output = serializer.Deserialize<BearerToken>(response);
@@ -227,7 +227,7 @@ public void Can_Deserialize_Exponential_Notation()
227227
[Test]
228228
public void Can_Deserialize_From_Root_Element()
229229
{
230-
var doc = File.ReadAllText(Path.Combine(CurrentPath, "SampleData", "sojson.txt"));
230+
var doc = File.ReadAllText(Path.Combine(CurrentPath, "SampleData", "sojson.json"));
231231
var serializer = new JsonSerializer {RootElement = "User"};
232232
var output = serializer.Deserialize<SoUser>(new RestResponse {Content = doc});
233233

@@ -253,7 +253,7 @@ public void Can_Deserialize_Generic_List_of_DateTime()
253253
[Test]
254254
public void Can_Deserialize_Generic_Members()
255255
{
256-
var doc = File.ReadAllText(Path.Combine(CurrentPath, "SampleData", "GenericWithList.txt"));
256+
var doc = File.ReadAllText(Path.Combine(CurrentPath, "SampleData", "GenericWithList.json"));
257257
var serializer = new JsonSerializer();
258258

259259
var output =
@@ -334,7 +334,7 @@ public void Can_Deserialize_Iso_Json_Dates()
334334
[Test]
335335
public void Can_Deserialize_Iso8601DateTimeLocal()
336336
{
337-
var payload = GetPayLoad<Iso8601DateTimeTestStructure>("iso8601datetimes.txt");
337+
var payload = GetPayLoad<Iso8601DateTimeTestStructure>("iso8601datetimes.json");
338338

339339
Assert.AreEqual(
340340
new DateTime(2012, 7, 19, 10, 23, 25, DateTimeKind.Utc),
@@ -345,7 +345,7 @@ public void Can_Deserialize_Iso8601DateTimeLocal()
345345
[Test]
346346
public void Can_Deserialize_Iso8601DateTimeWithOffset()
347347
{
348-
var payload = GetPayLoad<Iso8601DateTimeTestStructure>("iso8601datetimes.txt");
348+
var payload = GetPayLoad<Iso8601DateTimeTestStructure>("iso8601datetimes.json");
349349

350350
Assert.AreEqual(
351351
new DateTime(2012, 7, 19, 10, 23, 25, 544, DateTimeKind.Utc),
@@ -356,7 +356,7 @@ public void Can_Deserialize_Iso8601DateTimeWithOffset()
356356
[Test]
357357
public void Can_Deserialize_Iso8601DateTimeZulu()
358358
{
359-
var payload = GetPayLoad<Iso8601DateTimeTestStructure>("iso8601datetimes.txt");
359+
var payload = GetPayLoad<Iso8601DateTimeTestStructure>("iso8601datetimes.json");
360360

361361
Assert.AreEqual(
362362
new DateTime(2012, 7, 19, 10, 23, 25, 544, DateTimeKind.Utc),
@@ -379,7 +379,7 @@ public void Can_Deserialize_Json_Using_DeserializeAs_Attribute()
379379
[Test]
380380
public void Can_Deserialize_JsonNet_Dates()
381381
{
382-
var person = GetPayLoad<PersonForJson>("person.json.txt");
382+
var person = GetPayLoad<PersonForJson>("person.json");
383383

384384
Assert.AreEqual(
385385
new DateTime(2011, 6, 30, 8, 15, 46, 929, DateTimeKind.Utc),
@@ -406,7 +406,7 @@ public void Can_Deserialize_List_of_Guid()
406406
[Test]
407407
public void Can_Deserialize_Lists_of_Simple_Types()
408408
{
409-
var doc = File.ReadAllText(Path.Combine(CurrentPath, "SampleData", "jsonlists.txt"));
409+
var doc = File.ReadAllText(Path.Combine(CurrentPath, "SampleData", "jsonlists.json"));
410410
var serializer = new JsonSerializer();
411411
var output = serializer.Deserialize<JsonLists>(new RestResponse {Content = doc});
412412

@@ -449,7 +449,7 @@ public void Can_Deserialize_Names_With_Dashes_With_Default_Root_Alternative_Cult
449449
[Test]
450450
public void Can_Deserialize_Names_With_Underscore_Prefix()
451451
{
452-
var data = File.ReadAllText(Path.Combine(CurrentPath, "SampleData", "underscore_prefix.txt"));
452+
var data = File.ReadAllText(Path.Combine(CurrentPath, "SampleData", "underscore_prefix.json"));
453453
var response = new RestResponse {Content = data};
454454
var serializer = new JsonSerializer {RootElement = "User"};
455455
var output = serializer.Deserialize<SoUser>(response);
@@ -506,15 +506,15 @@ public void Can_Deserialize_Null_Elements_to_Nullable_Values()
506506
[Test]
507507
public void Can_Deserialize_Nullable_DateTime_With_Null()
508508
{
509-
var payload = GetPayLoad<DateTimeTestStructure>("datetimes.txt");
509+
var payload = GetPayLoad<DateTimeTestStructure>("datetimes.json");
510510

511511
Assert.Null(payload.NullableDateTimeWithNull);
512512
}
513513

514514
[Test]
515515
public void Can_Deserialize_Nullable_DateTime_With_Value()
516516
{
517-
var payload = GetPayLoad<DateTimeTestStructure>("datetimes.txt");
517+
var payload = GetPayLoad<DateTimeTestStructure>("datetimes.json");
518518

519519
Assert.NotNull(payload.NullableDateTimeWithValue);
520520

@@ -527,15 +527,15 @@ public void Can_Deserialize_Nullable_DateTime_With_Value()
527527
[Test]
528528
public void Can_Deserialize_Nullable_DateTimeOffset_With_Null()
529529
{
530-
var payload = GetPayLoad<DateTimeTestStructure>("datetimes.txt");
530+
var payload = GetPayLoad<DateTimeTestStructure>("datetimes.json");
531531

532532
Assert.Null(payload.NullableDateTimeOffsetWithNull);
533533
}
534534

535535
[Test]
536536
public void Can_Deserialize_Nullable_DateTimeOffset_With_Value()
537537
{
538-
var payload = GetPayLoad<DateTimeTestStructure>("datetimes.txt");
538+
var payload = GetPayLoad<DateTimeTestStructure>("datetimes.json");
539539

540540
Assert.NotNull(payload.NullableDateTimeOffsetWithValue);
541541

@@ -548,7 +548,7 @@ public void Can_Deserialize_Nullable_DateTimeOffset_With_Value()
548548
[Test]
549549
public void Can_Deserialize_Object_Type_Property_With_Primitive_Vale()
550550
{
551-
var payload = GetPayLoad<ObjectProperties>("objectproperty.txt");
551+
var payload = GetPayLoad<ObjectProperties>("objectproperty.json");
552552

553553
Assert.AreEqual(42L, payload.ObjectProperty);
554554
}
@@ -579,7 +579,7 @@ public void Can_Deserialize_Quoted_Primitive()
579579
[Test]
580580
public void Can_Deserialize_Root_Json_Array_To_Inherited_List()
581581
{
582-
var data = File.ReadAllText(Path.Combine(CurrentPath, "SampleData", "jsonarray.txt"));
582+
var data = File.ReadAllText(Path.Combine(CurrentPath, "SampleData", "jsonarray.json"));
583583
var response = new RestResponse {Content = data};
584584
var serializer = new JsonSerializer();
585585
var output = serializer.Deserialize<StatusList>(response);
@@ -590,7 +590,7 @@ public void Can_Deserialize_Root_Json_Array_To_Inherited_List()
590590
[Test]
591591
public void Can_Deserialize_Root_Json_Array_To_List()
592592
{
593-
var data = File.ReadAllText(Path.Combine(CurrentPath, "SampleData", "jsonarray.txt"));
593+
var data = File.ReadAllText(Path.Combine(CurrentPath, "SampleData", "jsonarray.json"));
594594
var response = new RestResponse {Content = data};
595595
var serializer = new JsonSerializer();
596596
var output = serializer.Deserialize<List<status>>(response);
@@ -601,7 +601,7 @@ public void Can_Deserialize_Root_Json_Array_To_List()
601601
[Test]
602602
public void Can_Deserialize_Select_Tokens()
603603
{
604-
var data = File.ReadAllText(Path.Combine(CurrentPath, "SampleData", "jsonarray.txt"));
604+
var data = File.ReadAllText(Path.Combine(CurrentPath, "SampleData", "jsonarray.json"));
605605
var response = new RestResponse {Content = data};
606606
var serializer = new JsonSerializer();
607607
var output = serializer.Deserialize<StatusComplexList>(response);
@@ -654,7 +654,7 @@ public void Can_Deserialize_Simple_Generic_List_of_Simple_Types_With_Nulls()
654654
[Test]
655655
public void Can_Deserialize_TimeSpan()
656656
{
657-
var payload = GetPayLoad<TimeSpanTestStructure>("timespans.txt");
657+
var payload = GetPayLoad<TimeSpanTestStructure>("timespans.json");
658658

659659
Assert.AreEqual(new TimeSpan(468006), payload.Tick);
660660
Assert.AreEqual(new TimeSpan(0, 0, 0, 0, 125), payload.Millisecond);
@@ -677,7 +677,7 @@ public void Can_Deserialize_TimeSpan()
677677
[Test]
678678
public void Can_Deserialize_To_Dictionary_Int_Object()
679679
{
680-
var doc = File.ReadAllText(Path.Combine(CurrentPath, "SampleData", "jsondictionary_KeysType.txt"));
680+
var doc = File.ReadAllText(Path.Combine(CurrentPath, "SampleData", "jsondictionary_KeysType.json"));
681681
var serializer = new JsonSerializer();
682682

683683
var output =
@@ -693,7 +693,7 @@ public void Can_Deserialize_To_Dictionary_Int_Object()
693693
[Test]
694694
public void Can_Deserialize_To_Dictionary_String_Object()
695695
{
696-
var doc = File.ReadAllText(Path.Combine(CurrentPath, "SampleData", "jsondictionary.txt"));
696+
var doc = File.ReadAllText(Path.Combine(CurrentPath, "SampleData", "jsondictionary.json"));
697697
var serializer = new JsonSerializer();
698698

699699
var output =
@@ -755,7 +755,7 @@ public void Can_Deserialize_Unix_Json_Millisecond_Dates()
755755
[Test]
756756
public void Can_Deserialize_Various_Enum_Types()
757757
{
758-
var data = File.ReadAllText(Path.Combine(CurrentPath, "SampleData", "jsonenumtypes.txt"));
758+
var data = File.ReadAllText(Path.Combine(CurrentPath, "SampleData", "jsonenumtypes.json"));
759759
var response = new RestResponse {Content = data};
760760
var serializer = new JsonSerializer();
761761
var output = serializer.Deserialize<JsonEnumTypesTestStructure>(response);
@@ -773,7 +773,7 @@ public void Can_Deserialize_Various_Enum_Types()
773773
[Test]
774774
public void Can_Deserialize_Various_Enum_Values()
775775
{
776-
var data = File.ReadAllText(Path.Combine(CurrentPath, "SampleData", "jsonenums.txt"));
776+
var data = File.ReadAllText(Path.Combine(CurrentPath, "SampleData", "jsonenums.json"));
777777
var response = new RestResponse {Content = data};
778778
var serializer = new JsonSerializer();
779779
var output = serializer.Deserialize<JsonEnumsTestStructure>(response);

test/RestSharp.Tests/RestSharp.Tests.csproj

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@
2525
<None Update="SampleData\header_and_rows.xml">
2626
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2727
</None>
28-
<None Update="SampleData\4sq.txt">
28+
<None Update="SampleData\4sq.json">
2929
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
3030
</None>
31-
<None Update="SampleData\bearertoken.txt">
31+
<None Update="SampleData\bearertoken.json">
3232
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
3333
</None>
3434
<None Update="SampleData\boolean_from_number.xml">
@@ -37,7 +37,7 @@
3737
<None Update="SampleData\boolean_from_string.xml">
3838
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
3939
</None>
40-
<None Update="SampleData\datetimes.txt">
40+
<None Update="SampleData\datetimes.json">
4141
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
4242
</None>
4343
<None Update="SampleData\deserialize_as_list.xml">
@@ -49,7 +49,7 @@
4949
<None Update="SampleData\eventful.xml">
5050
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
5151
</None>
52-
<None Update="SampleData\GenericWithList.txt">
52+
<None Update="SampleData\GenericWithList.json">
5353
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
5454
</None>
5555
<None Update="SampleData\Goodreads.xml">
@@ -61,28 +61,28 @@
6161
<None Update="SampleData\InlineListSample.xml">
6262
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
6363
</None>
64-
<None Update="SampleData\iso8601datetimes.txt">
64+
<None Update="SampleData\iso8601datetimes.json">
6565
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
6666
</None>
67-
<None Update="SampleData\jsonarray.txt">
67+
<None Update="SampleData\jsonarray.json">
6868
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
6969
</None>
70-
<None Update="SampleData\jsondictionary.txt">
70+
<None Update="SampleData\jsondictionary.json">
7171
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
7272
</None>
73-
<None Update="SampleData\jsondictionary_KeysType.txt">
73+
<None Update="SampleData\jsondictionary_KeysType.json">
7474
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
7575
</None>
76-
<None Update="SampleData\jsondictionary_null.txt">
76+
<None Update="SampleData\jsondictionary_null.json">
7777
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
7878
</None>
79-
<None Update="SampleData\jsonenums.txt">
79+
<None Update="SampleData\jsonenums.json">
8080
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
8181
</None>
82-
<None Update="SampleData\jsonenumtypes.txt">
82+
<None Update="SampleData\jsonenumtypes.json">
8383
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
8484
</None>
85-
<None Update="SampleData\jsonlists.txt">
85+
<None Update="SampleData\jsonlists.json">
8686
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
8787
</None>
8888
<None Update="SampleData\Lastfm.xml">
@@ -94,22 +94,22 @@
9494
<None Update="SampleData\NestedListSample.xml">
9595
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
9696
</None>
97-
<None Update="SampleData\objectproperty.txt">
97+
<None Update="SampleData\objectproperty.json">
9898
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
9999
</None>
100-
<None Update="SampleData\person.json.txt">
100+
<None Update="SampleData\person.json">
101101
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
102102
</None>
103103
<None Update="SampleData\restsharp.nuspec">
104104
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
105105
</None>
106-
<None Update="SampleData\sojson.txt">
106+
<None Update="SampleData\sojson.json">
107107
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
108108
</None>
109-
<None Update="SampleData\timespans.txt">
109+
<None Update="SampleData\timespans.json">
110110
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
111111
</None>
112-
<None Update="SampleData\underscore_prefix.txt">
112+
<None Update="SampleData\underscore_prefix.json">
113113
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
114114
</None>
115115
<None Update="SampleData\xmllists.xml">

0 commit comments

Comments
 (0)