diff --git a/README.md b/README.md
index 02f6dee7..60fd2bd1 100644
--- a/README.md
+++ b/README.md
@@ -51,7 +51,7 @@ Be careful when using `byte[]` in your variables object, as most JSON serializer
### Execute Query/Mutation:
```csharp
-var graphQLClient = new GraphQLHttpClient("https://swapi.apis.guru/");
+var graphQLClient = new GraphQLHttpClient("https://swapi.apis.guru/", new NewtonsoftJsonSerializer());
public class PersonAndFilmsResponse {
public PersonContent Person { get; set; }
diff --git a/examples/GraphQL.Client.Example/GraphQL.Client.Example.csproj b/examples/GraphQL.Client.Example/GraphQL.Client.Example.csproj
index d9680f86..54506df0 100644
--- a/examples/GraphQL.Client.Example/GraphQL.Client.Example.csproj
+++ b/examples/GraphQL.Client.Example/GraphQL.Client.Example.csproj
@@ -7,6 +7,7 @@
+
diff --git a/examples/GraphQL.Client.Example/Program.cs b/examples/GraphQL.Client.Example/Program.cs
index 5dd2b1d6..2ef597ec 100644
--- a/examples/GraphQL.Client.Example/Program.cs
+++ b/examples/GraphQL.Client.Example/Program.cs
@@ -3,6 +3,7 @@
using System.Text.Json;
using System.Threading.Tasks;
using GraphQL.Client.Http;
+using GraphQL.Client.Serializer.Newtonsoft;
namespace GraphQL.Client.Example
{
@@ -13,7 +14,7 @@ public class Program
public static async Task Main(string[] args)
{
_ = args;
- using var graphQLClient = new GraphQLHttpClient("https://swapi.apis.guru/");
+ using var graphQLClient = new GraphQLHttpClient("https://swapi.apis.guru/", new NewtonsoftJsonSerializer());
var personAndFilmsRequest = new GraphQLRequest
{
diff --git a/src/GraphQL.Client.Serializer.Newtonsoft/MapConverter.cs b/src/GraphQL.Client.Serializer.Newtonsoft/MapConverter.cs
index 5d4510d6..f15787e8 100644
--- a/src/GraphQL.Client.Serializer.Newtonsoft/MapConverter.cs
+++ b/src/GraphQL.Client.Serializer.Newtonsoft/MapConverter.cs
@@ -61,8 +61,6 @@ private IEnumerable ReadArray(JToken element)
}
}
- private object ReadNumber(JToken token) => ((JValue) token).Value;
-
private bool IsUnsupportedJTokenType(JTokenType type) => type == JTokenType.Constructor || type == JTokenType.Property || type == JTokenType.Comment;
}
}
diff --git a/src/GraphQL.Client/GraphQL.Client.csproj b/src/GraphQL.Client/GraphQL.Client.csproj
index 3b11e942..d1d723f9 100644
--- a/src/GraphQL.Client/GraphQL.Client.csproj
+++ b/src/GraphQL.Client/GraphQL.Client.csproj
@@ -36,7 +36,6 @@
-
diff --git a/src/GraphQL.Client/GraphQLHttpClient.cs b/src/GraphQL.Client/GraphQLHttpClient.cs
index a6a7a763..36f24198 100644
--- a/src/GraphQL.Client/GraphQLHttpClient.cs
+++ b/src/GraphQL.Client/GraphQLHttpClient.cs
@@ -8,7 +8,6 @@
using GraphQL.Client.Abstractions;
using GraphQL.Client.Abstractions.Websocket;
using GraphQL.Client.Http.Websocket;
-using GraphQL.Client.Serializer.Newtonsoft;
namespace GraphQL.Client.Http
{
@@ -19,7 +18,11 @@ public class GraphQLHttpClient : IGraphQLClient
private readonly GraphQLHttpWebSocket _graphQlHttpWebSocket;
private readonly CancellationTokenSource _cancellationTokenSource = new CancellationTokenSource();
private readonly ConcurrentDictionary, object> _subscriptionStreams = new ConcurrentDictionary, object>();
- private IGraphQLWebsocketJsonSerializer JsonSerializer => Options.JsonSerializer;
+
+ ///
+ /// the json serializer
+ ///
+ public IGraphQLWebsocketJsonSerializer JsonSerializer { get; }
///
/// the instance of which is used internally
@@ -44,20 +47,18 @@ public class GraphQLHttpClient : IGraphQLClient
#region Constructors
- public GraphQLHttpClient(string endPoint) : this(new Uri(endPoint)) { }
-
- public GraphQLHttpClient(Uri endPoint) : this(o => o.EndPoint = endPoint) { }
-
- public GraphQLHttpClient(Action configure) : this(configure.New()) { }
+ public GraphQLHttpClient(string endPoint, IGraphQLWebsocketJsonSerializer serializer) : this(new Uri(endPoint), serializer) { }
- public GraphQLHttpClient(GraphQLHttpClientOptions options) : this(options, new HttpClient(options.HttpMessageHandler)) { }
+ public GraphQLHttpClient(Uri endPoint, IGraphQLWebsocketJsonSerializer serializer) : this(o => o.EndPoint = endPoint, serializer) { }
- public GraphQLHttpClient(GraphQLHttpClientOptions options, HttpClient httpClient) : this(options, httpClient, new NewtonsoftJsonSerializer()) { }
+ public GraphQLHttpClient(Action configure, IGraphQLWebsocketJsonSerializer serializer) : this(configure.New(), serializer) { }
- public GraphQLHttpClient(GraphQLHttpClientOptions options, HttpClient httpClient, IGraphQLWebsocketJsonSerializer serializer)
+ public GraphQLHttpClient(GraphQLHttpClientOptions options, IGraphQLWebsocketJsonSerializer serializer) : this(options, serializer, new HttpClient(options.HttpMessageHandler)) { }
+
+ public GraphQLHttpClient(GraphQLHttpClientOptions options, IGraphQLWebsocketJsonSerializer serializer, HttpClient httpClient)
{
Options = options ?? throw new ArgumentNullException(nameof(options));
- Options.JsonSerializer = serializer ?? throw new ArgumentNullException(nameof(serializer));
+ JsonSerializer = serializer ?? throw new ArgumentNullException(nameof(serializer));
HttpClient = httpClient ?? throw new ArgumentNullException(nameof(httpClient));
_graphQlHttpWebSocket = new GraphQLHttpWebSocket(GetWebSocketUri(), this);
}
diff --git a/src/GraphQL.Client/GraphQLHttpClientOptions.cs b/src/GraphQL.Client/GraphQLHttpClientOptions.cs
index 915ad967..6b93cb7b 100644
--- a/src/GraphQL.Client/GraphQLHttpClientOptions.cs
+++ b/src/GraphQL.Client/GraphQLHttpClientOptions.cs
@@ -2,7 +2,6 @@
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
-using GraphQL.Client.Abstractions.Websocket;
namespace GraphQL.Client.Http
{
@@ -18,11 +17,6 @@ public class GraphQLHttpClientOptions
///
public Uri EndPoint { get; set; }
- ///
- /// the json serializer
- ///
- public IGraphQLWebsocketJsonSerializer JsonSerializer { get; set; }
-
///
/// The that is going to be used
///
diff --git a/src/GraphQL.Client/HttpClientExtensions.cs b/src/GraphQL.Client/HttpClientExtensions.cs
deleted file mode 100644
index 06315817..00000000
--- a/src/GraphQL.Client/HttpClientExtensions.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using System;
-using System.Net.Http;
-
-namespace GraphQL.Client.Http
-{
-
- public static class HttpClientExtensions
- {
-
- public static GraphQLHttpClient AsGraphQLClient(this HttpClient httpClient, string endPoint) =>
- httpClient.AsGraphQLClient(new Uri(endPoint));
-
- public static GraphQLHttpClient AsGraphQLClient(this HttpClient httpClient, Uri endPoint) =>
- new GraphQLHttpClient(new GraphQLHttpClientOptions { EndPoint = endPoint }, httpClient);
-
- public static GraphQLHttpClient AsGraphQLClient(this HttpClient httpClient, GraphQLHttpClientOptions graphQLHttpClientOptions) =>
- new GraphQLHttpClient(graphQLHttpClientOptions, httpClient);
- }
-
-}
diff --git a/src/GraphQL.Client/Websocket/GraphQLHttpWebSocket.cs b/src/GraphQL.Client/Websocket/GraphQLHttpWebSocket.cs
index 50351075..f0156030 100644
--- a/src/GraphQL.Client/Websocket/GraphQLHttpWebSocket.cs
+++ b/src/GraphQL.Client/Websocket/GraphQLHttpWebSocket.cs
@@ -139,7 +139,7 @@ public IObservable> CreateSubscriptionStream(
+ _client.JsonSerializer.DeserializeToWebsocketResponse(
response.MessageBytes);
o.OnNext(typedResponse.Payload);
@@ -296,7 +296,7 @@ public Task> SendRequest(GraphQLRequest re
{
Debug.WriteLine($"received response for request {websocketRequest.Id}");
var typedResponse =
- _client.Options.JsonSerializer.DeserializeToWebsocketResponse(
+ _client.JsonSerializer.DeserializeToWebsocketResponse(
response.MessageBytes);
return typedResponse.Payload;
});
@@ -353,7 +353,7 @@ private async Task SendWebSocketRequestAsync(GraphQLWebSocketRequest request)
}
await InitializeWebSocket();
- var requestBytes = Options.JsonSerializer.SerializeToBytes(request);
+ var requestBytes = _client.JsonSerializer.SerializeToBytes(request);
await _clientWebSocket.SendAsync(
new ArraySegment(requestBytes),
WebSocketMessageType.Text,
@@ -554,7 +554,7 @@ private async Task ReceiveWebsocketMessagesAsync()
if (webSocketReceiveResult.MessageType == WebSocketMessageType.Text)
{
- var response = await Options.JsonSerializer.DeserializeToWebsocketResponseWrapperAsync(ms);
+ var response = await _client.JsonSerializer.DeserializeToWebsocketResponseWrapperAsync(ms);
response.MessageBytes = ms.ToArray();
Debug.WriteLine($"{response.MessageBytes.Length} bytes received for id {response.Id} on websocket {_clientWebSocket.GetHashCode()} (thread {Thread.CurrentThread.ManagedThreadId})...");
return response;
diff --git a/tests/GraphQL.Integration.Tests/Extensions/WebApplicationFactoryExtensions.cs b/tests/GraphQL.Integration.Tests/Extensions/WebApplicationFactoryExtensions.cs
deleted file mode 100644
index 546b6a8e..00000000
--- a/tests/GraphQL.Integration.Tests/Extensions/WebApplicationFactoryExtensions.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using System;
-using GraphQL.Client.Http;
-using Microsoft.AspNetCore.Mvc.Testing;
-
-namespace GraphQL.Integration.Tests.Extensions
-{
- public static class WebApplicationFactoryExtensions
- {
- public static GraphQLHttpClient CreateGraphQlHttpClient(
- this WebApplicationFactory factory, string graphQlSchemaUrl, string urlScheme = "http://") where TEntryPoint : class
- {
- var httpClient = factory.CreateClient();
- var uriBuilder = new UriBuilder(httpClient.BaseAddress);
- uriBuilder.Path = graphQlSchemaUrl;
- uriBuilder.Scheme = urlScheme;
- return httpClient.AsGraphQLClient(uriBuilder.Uri);
- }
- }
-}
diff --git a/tests/GraphQL.Integration.Tests/GraphQL.Integration.Tests.csproj b/tests/GraphQL.Integration.Tests/GraphQL.Integration.Tests.csproj
index e2e2d726..777bd6ed 100644
--- a/tests/GraphQL.Integration.Tests/GraphQL.Integration.Tests.csproj
+++ b/tests/GraphQL.Integration.Tests/GraphQL.Integration.Tests.csproj
@@ -28,4 +28,5 @@
+
diff --git a/tests/GraphQL.Integration.Tests/Helpers/WebHostHelpers.cs b/tests/GraphQL.Integration.Tests/Helpers/WebHostHelpers.cs
index 38704066..81ff2248 100644
--- a/tests/GraphQL.Integration.Tests/Helpers/WebHostHelpers.cs
+++ b/tests/GraphQL.Integration.Tests/Helpers/WebHostHelpers.cs
@@ -41,9 +41,9 @@ public static GraphQLHttpClient GetGraphQLClient(int port, string endpoint, bool
=> new GraphQLHttpClient(new GraphQLHttpClientOptions
{
EndPoint = new Uri($"http://localhost:{port}{endpoint}"),
- UseWebSocketForQueriesAndMutations = requestsViaWebsocket,
- JsonSerializer = serializer ?? new NewtonsoftJsonSerializer()
- });
+ UseWebSocketForQueriesAndMutations = requestsViaWebsocket
+ },
+ serializer ?? new NewtonsoftJsonSerializer());
}
public class TestServerSetup : IDisposable
diff --git a/tests/GraphQL.Integration.Tests/QueryAndMutationTests/Base.cs b/tests/GraphQL.Integration.Tests/QueryAndMutationTests/Base.cs
index 72a28d60..550eb6a0 100644
--- a/tests/GraphQL.Integration.Tests/QueryAndMutationTests/Base.cs
+++ b/tests/GraphQL.Integration.Tests/QueryAndMutationTests/Base.cs
@@ -73,7 +73,7 @@ public async void QueryAsHttpResponseTheory(int id, string name)
httpResponse.ResponseHeaders.Date.Should().BeCloseTo(DateTimeOffset.Now, TimeSpan.FromMinutes(1));
}
- [Theory]
+ [Theory(Skip = "System.Json.Net deserializes 'dynamic' as JsonElement.")]
[ClassData(typeof(StarWarsHumans))]
public async void QueryWithDynamicReturnTypeTheory(int id, string name)
{