Skip to content

Commit 40e202d

Browse files
committed
Add support for mapping JSON objects to Dictionary<string, string> when the field values are different for each field, e.g. HAL _embedded object.
1 parent 7229095 commit 40e202d

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

RestSharp.Tests/JsonTests.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -485,6 +485,20 @@ public void Can_Deserialize_To_Dictionary_String_String()
485485
Assert.Equal(bd["ThingBlue"], "ThingBlue");
486486
}
487487

488+
[Fact]
489+
public void Can_Deserialize_To_Dictionary_String_String_With_Dynamic_Values ()
490+
{
491+
var doc = CreateDynamicJsonStringDictionary ();
492+
var d = new JsonDeserializer ();
493+
var response = new RestResponse { Content = doc };
494+
var bd = d.Deserialize<Dictionary<string, string>> (response);
495+
496+
Assert.Equal ("[\"Value1\",\"Value2\"]", bd["Thing1"]);
497+
Assert.Equal ("Thing2", bd["Thing2"]);
498+
Assert.Equal ("{\"Name\":\"ThingRed\",\"Color\":\"Red\"}", bd["ThingRed"]);
499+
Assert.Equal ("{\"Name\":\"ThingBlue\",\"Color\":\"Blue\"}", bd["ThingBlue"]);
500+
}
501+
488502
private string CreateJsonWithUnderscores()
489503
{
490504
var doc = new JObject();
@@ -655,5 +669,15 @@ public string CreateJsonStringDictionary()
655669
doc["ThingBlue"] = "ThingBlue";
656670
return doc.ToString();
657671
}
672+
673+
public string CreateDynamicJsonStringDictionary ()
674+
{
675+
var doc = new JObject ();
676+
doc["Thing1"] = new JArray () { "Value1", "Value2" };
677+
doc["Thing2"] = "Thing2";
678+
doc["ThingRed"] = new JObject (new JProperty ("Name", "ThingRed"), new JProperty ("Color", "Red"));
679+
doc["ThingBlue"] = new JObject (new JProperty("Name", "ThingBlue"), new JProperty ("Color", "Blue"));
680+
return doc.ToString ();
681+
}
658682
}
659683
}

RestSharp/Deserializers/JsonDeserializer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ private object CreateAndMap(Type type, object element)
246246
}
247247
else if (type == typeof(string))
248248
{
249-
instance = (string)element;
249+
instance = element.ToString();
250250
}
251251
else
252252
{

0 commit comments

Comments
 (0)