public void WriteMessage(string protocolTestDataName) { var testData = ProtocolTestData[protocolTestDataName]; var expectedOutput = Frame(testData.Json); var protocolOptions = new NewtonsoftJsonHubProtocolOptions { PayloadSerializerSettings = new JsonSerializerSettings() { NullValueHandling = testData.NullValueHandling, ContractResolver = testData.CamelCase ? new CamelCasePropertyNamesContractResolver() : new DefaultContractResolver() } }; var protocol = new NewtonsoftJsonHubProtocol(Options.Create(protocolOptions)); var writer = MemoryBufferWriter.Get(); try { protocol.WriteMessage(testData.Message, writer); var json = Encoding.UTF8.GetString(writer.ToArray()); Assert.Equal(expectedOutput, json); } finally { MemoryBufferWriter.Return(writer); } }
public override void ConfigureServices(ServiceConfigurationContext context) { var newtonsoftJsonOptions = new NewtonsoftJsonHubProtocolOptions(); context.Services.ExecutePreConfiguredActions(newtonsoftJsonOptions); context.Services.TryAddEnumerable(ServiceDescriptor.Singleton <IHubProtocol, NewtonsoftJsonHubProtocol>()); }
protected override IHubProtocol GetProtocolWithOptions(bool useCamelCase, bool ignoreNullValues) { var protocolOptions = new NewtonsoftJsonHubProtocolOptions { PayloadSerializerSettings = new JsonSerializerSettings() { NullValueHandling = ignoreNullValues ? NullValueHandling.Ignore : NullValueHandling.Include, ContractResolver = useCamelCase ? new CamelCasePropertyNamesContractResolver() : new DefaultContractResolver() } }; return(new NewtonsoftJsonHubProtocol(Options.Create(protocolOptions))); }
public async Task CamelCasedJsonIsPreservedAcrossRedisBoundary() { var server = new TestRedisServer(); var messagePackOptions = new MessagePackHubProtocolOptions(); var jsonOptions = new NewtonsoftJsonHubProtocolOptions(); jsonOptions.PayloadSerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); using (var client1 = new TestClient()) using (var client2 = new TestClient()) { // The sending manager has serializer settings var manager1 = CreateLifetimeManager(server, messagePackOptions, jsonOptions); // The receiving one doesn't matter because of how we serialize! var manager2 = CreateLifetimeManager(server); var connection1 = HubConnectionContextUtils.Create(client1.Connection); var connection2 = HubConnectionContextUtils.Create(client2.Connection); await manager1.OnConnectedAsync(connection1).DefaultTimeout(); await manager2.OnConnectedAsync(connection2).DefaultTimeout(); await manager1.SendAllAsync("Hello", new object[] { new TestObject { TestProperty = "Foo" } }); var message = Assert.IsType <InvocationMessage>(await client2.ReadAsync().DefaultTimeout()); Assert.Equal("Hello", message.Target); Assert.Collection( message.Arguments, arg0 => { var dict = Assert.IsType <JObject>(arg0); Assert.Collection(dict.Properties(), prop => { Assert.Equal("testProperty", prop.Name); Assert.Equal("Foo", prop.Value.Value <string>()); }); }); } }
public void ParseMessage(string protocolTestDataName) { var testData = ProtocolTestData[protocolTestDataName]; var input = Frame(testData.Json); var protocolOptions = new NewtonsoftJsonHubProtocolOptions { PayloadSerializerSettings = new JsonSerializerSettings { NullValueHandling = testData.NullValueHandling, ContractResolver = testData.CamelCase ? new CamelCasePropertyNamesContractResolver() : new DefaultContractResolver() } }; var binder = new TestBinder(testData.Message); var protocol = new NewtonsoftJsonHubProtocol(Options.Create(protocolOptions)); var data = new ReadOnlySequence <byte>(Encoding.UTF8.GetBytes(input)); protocol.TryParseMessage(ref data, binder, out var message); Assert.Equal(testData.Message, message, TestHubMessageEqualityComparer.Instance); }
private RedisHubLifetimeManager <Hub> CreateLifetimeManager(TestRedisServer server, MessagePackHubProtocolOptions messagePackOptions = null, NewtonsoftJsonHubProtocolOptions jsonOptions = null) { var options = new RedisOptions() { ConnectionFactory = async(t) => await Task.FromResult(new TestConnectionMultiplexer(server)) }; messagePackOptions = messagePackOptions ?? new MessagePackHubProtocolOptions(); jsonOptions = jsonOptions ?? new NewtonsoftJsonHubProtocolOptions(); return(new RedisHubLifetimeManager <Hub>( NullLogger <RedisHubLifetimeManager <Hub> > .Instance, Options.Create(options), new DefaultHubProtocolResolver(new IHubProtocol[] { new NewtonsoftJsonHubProtocol(Options.Create(jsonOptions)), new MessagePackHubProtocol(Options.Create(messagePackOptions)), }, NullLogger <DefaultHubProtocolResolver> .Instance))); }