diff --git a/logo.pdn b/logo.pdn index 562dbff..66b4e5f 100644 Binary files a/logo.pdn and b/logo.pdn differ diff --git a/logo.png b/logo.png index 5434f8d..38ceaf6 100644 Binary files a/logo.png and b/logo.png differ diff --git a/src/GraphQL.Query.Builder/QueryStringBuilder.cs b/src/GraphQL.Query.Builder/QueryStringBuilder.cs index ab8a100..71ec0a3 100644 --- a/src/GraphQL.Query.Builder/QueryStringBuilder.cs +++ b/src/GraphQL.Query.Builder/QueryStringBuilder.cs @@ -45,6 +45,7 @@ public void Clear() /// - Key value pair: `foo:"bar"` or `foo:10` ... /// - List: `["foo","bar"]` or `[1,2]` ... /// - Dictionary: `{foo:"bar",b:10}` + /// - Object: `{foo:"bar",b:10}` /// /// /// The formatted query param. @@ -54,7 +55,8 @@ internal protected virtual string FormatQueryParam(object value) switch (value) { case string strValue: - return "\"" + strValue + "\""; + string encoded = strValue.Replace("\"", "\\\""); + return $"\"{encoded}\""; case byte byteValue: return byteValue.ToString(); diff --git a/tests/GraphQL.Query.Builder.UnitTests/QueryStringBuilderTests.cs b/tests/GraphQL.Query.Builder.UnitTests/QueryStringBuilderTests.cs index 72cd413..5bee1fe 100644 --- a/tests/GraphQL.Query.Builder.UnitTests/QueryStringBuilderTests.cs +++ b/tests/GraphQL.Query.Builder.UnitTests/QueryStringBuilderTests.cs @@ -21,6 +21,15 @@ public void TestFormatQueryParam_string() Assert.Equal("\"value\"", new QueryStringBuilder().FormatQueryParam(value)); } + [Fact] + public void TestFormatQueryParam_string_json() + { + string value = "{\"foo\":\"bar\",\"array\":[1,2]}"; + Assert.Equal( + "\"{\\\"foo\\\":\\\"bar\\\",\\\"array\\\":[1,2]}\"", + new QueryStringBuilder().FormatQueryParam(value)); + } + [Fact] public void TestFormatQueryParam_byte() { @@ -265,7 +274,7 @@ public void TestFormatQueryParam_Object() }; Assert.Equal("{Age:10,Name:\"Test\",Orders:[{Product:{load:{weight:45},name:\"Truck 1\",wheelsNumber:6}}]}", new QueryStringBuilder().FormatQueryParam(@object)); - + // with inner object with null property @object = new Customer {