Skip to content

Commit 0ea5c06

Browse files
committed
Patching v3 to support v4+ unwrapped messages.
1 parent f606444 commit 0ea5c06

File tree

1 file changed

+25
-4
lines changed

1 file changed

+25
-4
lines changed

src/impl/Serializers/NServiceBus.Serializers.Json/JsonMessageSerializerBase.cs

+25-4
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,20 @@
1-
using System.Globalization;
1+
using System;
2+
using System.Globalization;
23
using System.IO;
34
using System.Runtime.Serialization.Formatters;
5+
using Newtonsoft.Json;
6+
using Newtonsoft.Json.Converters;
47
using NServiceBus.MessageInterfaces;
58
using NServiceBus.Serialization;
69
using NServiceBus.Serializers.Json.Internal;
7-
using Newtonsoft.Json;
8-
using Newtonsoft.Json.Converters;
910

1011
namespace NServiceBus.Serializers.Json
1112
{
1213
public abstract class JsonMessageSerializerBase : IMessageSerializer
1314
{
15+
// From v4+ we just look for it, but don't expect it
16+
const string EnclosedMessageTypes = "NServiceBus.EnclosedMessageTypes";
17+
1418
private readonly IMessageMapper _messageMapper;
1519

1620
protected JsonMessageSerializerBase(IMessageMapper messageMapper)
@@ -26,7 +30,7 @@ public JsonSerializerSettings JsonSerializerSettings
2630
{
2731
TypeNameAssemblyFormat = FormatterAssemblyStyle.Simple,
2832
TypeNameHandling = TypeNameHandling.Auto,
29-
Converters = { new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.RoundtripKind} }
33+
Converters = { new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.RoundtripKind } }
3034
};
3135
return serializerSettings;
3236
}
@@ -49,6 +53,23 @@ public object[] Deserialize(Stream stream)
4953
jsonSerializer.ContractResolver = new MessageContractResolver(_messageMapper);
5054

5155
JsonReader reader = CreateJsonReader(stream);
56+
reader.Read();
57+
58+
JsonToken firstTokenType = reader.TokenType;
59+
60+
if (firstTokenType != JsonToken.StartArray)
61+
{
62+
string messageTypes;
63+
64+
var bus = Configure.Instance.Builder.Build<IBus>();
65+
if (bus != null &&
66+
bus.CurrentMessageContext != null &&
67+
bus.CurrentMessageContext.Headers != null &&
68+
bus.CurrentMessageContext.Headers.TryGetValue(EnclosedMessageTypes, out messageTypes))
69+
{
70+
return new[] { jsonSerializer.Deserialize(reader, Type.GetType(messageTypes.Split(';')[0])) };
71+
}
72+
}
5273

5374
return jsonSerializer.Deserialize<object[]>(reader);
5475
}

0 commit comments

Comments
 (0)