diff --git a/src/NServiceBus.AcceptanceTests/DataBus/When_sending_databus_properties_with_systemjsonserializer.cs b/src/NServiceBus.AcceptanceTests/DataBus/When_sending_databus_properties_with_systemjsonserializer.cs new file mode 100644 index 0000000000..a56dabcea6 --- /dev/null +++ b/src/NServiceBus.AcceptanceTests/DataBus/When_sending_databus_properties_with_systemjsonserializer.cs @@ -0,0 +1,85 @@ +namespace NServiceBus.AcceptanceTests.DataBus +{ + using System.IO; + using System.Threading.Tasks; + using AcceptanceTesting; + using AcceptanceTesting.Customization; + using EndpointTemplates; + using NUnit.Framework; + + public class When_sending_databus_properties_with_systemjsonserializer : NServiceBusAcceptanceTest + { + [Test] + public async Task Should_receive_messages_with_largepayload_correctly() + { + var payloadToSend = new byte[PayloadSize]; + + var context = await Scenario.Define() + .WithEndpoint(b => b.When(session => session.Send(new MyMessageWithLargePayload + { + Payload = new DataBusProperty(payloadToSend) + }))) + .WithEndpoint() + .Done(c => c.ReceivedPayload != null) + .Run(); + + Assert.AreEqual(payloadToSend, context.ReceivedPayload, "The large payload should be marshalled correctly using the databus"); + } + + const int PayloadSize = 500; + + public class Context : ScenarioContext + { + public byte[] ReceivedPayload { get; set; } + } + + public class Sender : EndpointConfigurationBuilder + { + public Sender() + { + EndpointSetup(builder => + { + var basePath = Path.Combine(TestContext.CurrentContext.TestDirectory, "databus", "sender"); + builder.UseDataBus().BasePath(basePath); + builder.UseSerialization(); + builder.ConfigureRouting().RouteToEndpoint(typeof(MyMessageWithLargePayload), typeof(Receiver)); + }); + } + } + + public class Receiver : EndpointConfigurationBuilder + { + public Receiver() + { + EndpointSetup(builder => + { + var basePath = Path.Combine(TestContext.CurrentContext.TestDirectory, "databus", "sender"); + builder.UseDataBus().BasePath(basePath); + builder.UseSerialization(); + }); + } + + public class MyMessageHandler : IHandleMessages + { + public MyMessageHandler(Context context) + { + testContext = context; + } + + public Task Handle(MyMessageWithLargePayload messageWithLargePayload, IMessageHandlerContext context) + { + testContext.ReceivedPayload = messageWithLargePayload.Payload.Value; + + return Task.CompletedTask; + } + + Context testContext; + } + } + + public class MyMessageWithLargePayload : ICommand + { + public DataBusProperty Payload { get; set; } + } + } +} \ No newline at end of file diff --git a/src/NServiceBus.Core.Tests/ApprovalFiles/APIApprovals.ApproveNServiceBus.approved.txt b/src/NServiceBus.Core.Tests/ApprovalFiles/APIApprovals.ApproveNServiceBus.approved.txt index 5c1a93c928..04f02c12ba 100644 --- a/src/NServiceBus.Core.Tests/ApprovalFiles/APIApprovals.ApproveNServiceBus.approved.txt +++ b/src/NServiceBus.Core.Tests/ApprovalFiles/APIApprovals.ApproveNServiceBus.approved.txt @@ -211,6 +211,7 @@ namespace NServiceBus protected DataBusProperty(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) { } public bool HasValue { get; set; } public string Key { get; set; } + [System.Text.Json.Serialization.JsonIgnore] public System.Type Type { get; } public T Value { get; } public void GetObjectData(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) { } diff --git a/src/NServiceBus.Core/DataBus/DataBusProperty.cs b/src/NServiceBus.Core/DataBus/DataBusProperty.cs index e9095b4511..ffa7c2851d 100644 --- a/src/NServiceBus.Core/DataBus/DataBusProperty.cs +++ b/src/NServiceBus.Core/DataBus/DataBusProperty.cs @@ -3,6 +3,7 @@ using System; using System.Runtime.Serialization; using System.Security; + using System.Text.Json.Serialization; /// /// Default implementation for . @@ -54,6 +55,7 @@ protected DataBusProperty(SerializationInfo info, StreamingContext context) /// /// The property . /// + [JsonIgnore] public Type Type { get; } ///