diff --git a/src/WireMock.Net/Matchers/AbstractJsonPartialMatcher.cs b/src/WireMock.Net/Matchers/AbstractJsonPartialMatcher.cs index f3449458..234c6a85 100644 --- a/src/WireMock.Net/Matchers/AbstractJsonPartialMatcher.cs +++ b/src/WireMock.Net/Matchers/AbstractJsonPartialMatcher.cs @@ -82,7 +82,7 @@ public abstract class AbstractJsonPartialMatcher : JsonMatcher case JTokenType.Object: var nestedValues = value.ToObject>(); return nestedValues?.Any() != true || - nestedValues.All(pair => IsMatch(pair.Value, input.SelectToken(pair.Key))); + nestedValues.All(pair => IsMatch(pair.Value, input.SelectToken(pair.Key) ?? input[pair.Key])); // First try to select based on JPath expression, else just get the value. case JTokenType.Array: var valuesArray = value.ToObject(); diff --git a/test/WireMock.Net.Tests/Matchers/JsonPartialMatcherTests.cs b/test/WireMock.Net.Tests/Matchers/JsonPartialMatcherTests.cs index 0b3ff78f..7b3802d1 100644 --- a/test/WireMock.Net.Tests/Matchers/JsonPartialMatcherTests.cs +++ b/test/WireMock.Net.Tests/Matchers/JsonPartialMatcherTests.cs @@ -293,6 +293,23 @@ public class JsonPartialMatcherTests Assert.Equal(1.0, match); } + [Fact] + public void JsonPartialMatcher_IsMatch_JObjectAsStringWithDottedPropertyName() + { + // Assign + var matcher = new JsonPartialMatcher("{ \"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User\" : \"Test\" }"); + + // Act + var jObject = new JObject + { + { "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User", new JValue("Test") } + }; + var match = matcher.IsMatch(jObject).Score; + + // Assert + Assert.Equal(1.0, match); + } + [Fact] public void JsonPartialMatcher_IsMatch_GuidAsString() {