Skip to content

Commit 6c00e04

Browse files
authored
Add NServiceBus 10 version of the Newtonsoft snippets (#7755)
* Add NServiceBus 10 version of the Newtonsoft snippets * Use wildcards for Newtonsoft.Json.Bson
1 parent 1ec828c commit 6c00e04

File tree

10 files changed

+260
-4
lines changed

10 files changed

+260
-4
lines changed

Snippets/Newtonsoft/Newtonsoft.sln

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Newtonsoft_2.4", "Newtonsof
1010
EndProject
1111
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Newtonsoft_4", "Newtonsoft_4\Newtonsoft_4.csproj", "{2DD7A612-EC8F-4EE7-9802-765E79496141}"
1212
EndProject
13+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Newtonsoft_5", "Newtonsoft_5\Newtonsoft_5.csproj", "{B2BF1A81-0332-4FC1-B6F5-522A7B6E43E9}"
14+
EndProject
1315
Global
1416
GlobalSection(SolutionConfigurationPlatforms) = preSolution
1517
Debug|Any CPU = Debug|Any CPU
@@ -32,6 +34,10 @@ Global
3234
{2DD7A612-EC8F-4EE7-9802-765E79496141}.Debug|Any CPU.Build.0 = Debug|Any CPU
3335
{2DD7A612-EC8F-4EE7-9802-765E79496141}.Release|Any CPU.ActiveCfg = Release|Any CPU
3436
{2DD7A612-EC8F-4EE7-9802-765E79496141}.Release|Any CPU.Build.0 = Release|Any CPU
37+
{B2BF1A81-0332-4FC1-B6F5-522A7B6E43E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
38+
{B2BF1A81-0332-4FC1-B6F5-522A7B6E43E9}.Debug|Any CPU.Build.0 = Debug|Any CPU
39+
{B2BF1A81-0332-4FC1-B6F5-522A7B6E43E9}.Release|Any CPU.ActiveCfg = Release|Any CPU
40+
{B2BF1A81-0332-4FC1-B6F5-522A7B6E43E9}.Release|Any CPU.Build.0 = Release|Any CPU
3541
EndGlobalSection
3642
GlobalSection(SolutionProperties) = preSolution
3743
HideSolutionNode = FALSE

Snippets/Newtonsoft/Newtonsoft_2.4/Newtonsoft_2.4.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<TargetFramework>net48</TargetFramework>
44
</PropertyGroup>
55
<ItemGroup>
6-
<PackageReference Include="Newtonsoft.Json.Bson" Version="1.0.1" />
6+
<PackageReference Include="Newtonsoft.Json.Bson" Version="1.*" />
77
<PackageReference Include="NServiceBus.Newtonsoft.Json" Version="2.4.*" />
88
</ItemGroup>
99
</Project>

Snippets/Newtonsoft/Newtonsoft_2/Newtonsoft_2.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<TargetFramework>net48</TargetFramework>
44
</PropertyGroup>
55
<ItemGroup>
6-
<PackageReference Include="Newtonsoft.Json.Bson" Version="1.0.1" />
6+
<PackageReference Include="Newtonsoft.Json.Bson" Version="1.*" />
77
<PackageReference Include="NServiceBus.Newtonsoft.Json" Version="2.3.*" />
88
</ItemGroup>
99
</Project>

Snippets/Newtonsoft/Newtonsoft_3/Newtonsoft_3.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<TargetFramework>net48</TargetFramework>
44
</PropertyGroup>
55
<ItemGroup>
6-
<PackageReference Include="Newtonsoft.Json.Bson" Version="1.0.1" />
6+
<PackageReference Include="Newtonsoft.Json.Bson" Version="1.*" />
77
<PackageReference Include="NServiceBus.Newtonsoft.Json" Version="3.*" />
88
</ItemGroup>
99
</Project>

Snippets/Newtonsoft/Newtonsoft_4/Newtonsoft_4.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<TargetFramework>net8.0</TargetFramework>
44
</PropertyGroup>
55
<ItemGroup>
6-
<PackageReference Include="Newtonsoft.Json.Bson" Version="1.0.2" />
6+
<PackageReference Include="Newtonsoft.Json.Bson" Version="1.*" />
77
<PackageReference Include="NServiceBus.Newtonsoft.Json" Version="4.*" />
88
</ItemGroup>
99
</Project>
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
<PropertyGroup>
3+
<TargetFramework>net10.0</TargetFramework>
4+
</PropertyGroup>
5+
<ItemGroup>
6+
<PackageReference Include="Newtonsoft.Json.Bson" Version="1.*" />
7+
<PackageReference Include="NServiceBus.Newtonsoft.Json" Version="5.0.0-alpha.2" />
8+
</ItemGroup>
9+
</Project>
Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
using System;
2+
using System.Globalization;
3+
using System.IO;
4+
using System.Linq;
5+
using System.Text;
6+
using Newtonsoft.Json;
7+
using Newtonsoft.Json.Bson;
8+
using Newtonsoft.Json.Converters;
9+
using Newtonsoft.Json.Serialization;
10+
using NServiceBus;
11+
12+
class Usage
13+
{
14+
Usage(EndpointConfiguration endpointConfiguration)
15+
{
16+
#region NewtonsoftSerialization
17+
18+
endpointConfiguration.UseSerialization<NewtonsoftJsonSerializer>();
19+
20+
#endregion
21+
}
22+
23+
void CustomSettings(EndpointConfiguration endpointConfiguration)
24+
{
25+
#region NewtonsoftCustomSettings
26+
27+
var settings = new JsonSerializerSettings
28+
{
29+
TypeNameHandling = TypeNameHandling.Auto,
30+
Converters =
31+
{
32+
new IsoDateTimeConverter
33+
{
34+
DateTimeStyles = DateTimeStyles.RoundtripKind
35+
}
36+
}
37+
};
38+
var serialization = endpointConfiguration.UseSerialization<NewtonsoftJsonSerializer>();
39+
serialization.Settings(settings);
40+
41+
#endregion
42+
}
43+
44+
void CustomReader(EndpointConfiguration endpointConfiguration)
45+
{
46+
#region NewtonsoftCustomReader
47+
48+
var serialization = endpointConfiguration.UseSerialization<NewtonsoftJsonSerializer>();
49+
serialization.ReaderCreator(stream =>
50+
{
51+
var streamReader = new StreamReader(stream, Encoding.UTF8);
52+
return new JsonTextReader(streamReader);
53+
});
54+
55+
#endregion
56+
}
57+
58+
void CustomWriter(EndpointConfiguration endpointConfiguration)
59+
{
60+
#region NewtonsoftCustomWriter
61+
62+
var noBomEncoding = new UTF8Encoding(encoderShouldEmitUTF8Identifier: false, throwOnInvalidBytes: false);
63+
64+
var serialization = endpointConfiguration.UseSerialization<NewtonsoftJsonSerializer>();
65+
serialization.WriterCreator(stream =>
66+
{
67+
var streamWriter = new StreamWriter(stream, noBomEncoding);
68+
return new JsonTextWriter(streamWriter)
69+
{
70+
Formatting = Formatting.None
71+
};
72+
});
73+
74+
#endregion
75+
}
76+
77+
void ContentTypeKey(EndpointConfiguration endpointConfiguration)
78+
{
79+
#region NewtonsoftContentTypeKey
80+
81+
var serialization = endpointConfiguration.UseSerialization<NewtonsoftJsonSerializer>();
82+
serialization.ContentTypeKey("custom-key");
83+
84+
#endregion
85+
}
86+
87+
void Bson(EndpointConfiguration endpointConfiguration)
88+
{
89+
#region NewtonsoftBson
90+
91+
var serialization = endpointConfiguration.UseSerialization<NewtonsoftJsonSerializer>();
92+
serialization.ReaderCreator(stream => new BsonDataReader(stream));
93+
serialization.WriterCreator(stream => new BsonDataWriter(stream));
94+
95+
#endregion
96+
}
97+
98+
#region NewtonsoftAttributes
99+
100+
[JsonObject(MemberSerialization.OptIn)]
101+
public class CreatePersonMessage :
102+
IMessage
103+
{
104+
// "John Smith"
105+
[JsonProperty]
106+
public string Name { get; set; }
107+
108+
// "2000-12-15T22:11:03"
109+
[JsonProperty]
110+
public DateTime BirthDate { get; set; }
111+
112+
// new Date(976918263055)
113+
[JsonProperty]
114+
[JsonConverter(typeof(JavaScriptDateTimeConverter))]
115+
public DateTime LastModified { get; set; }
116+
117+
// not serialized because mode is opt-in
118+
public string Department { get; set; }
119+
}
120+
121+
#endregion
122+
123+
void KnownTypesBinderConfig(EndpointConfiguration endpointConfiguration)
124+
{
125+
#region KnownTypesBinderConfig
126+
endpointConfiguration.UseSerialization<NewtonsoftJsonSerializer>()
127+
.Settings(new JsonSerializerSettings
128+
{
129+
TypeNameHandling = TypeNameHandling.Auto,
130+
SerializationBinder = new SkipAssemblyNameForMessageTypesBinder(new[]
131+
{
132+
typeof(MyNativeIntegrationMessage)
133+
})
134+
});
135+
136+
#endregion
137+
}
138+
139+
#region KnownTypesBinder
140+
class SkipAssemblyNameForMessageTypesBinder : ISerializationBinder
141+
{
142+
Type[] messageTypes;
143+
144+
public SkipAssemblyNameForMessageTypesBinder(Type[] messageTypes)
145+
{
146+
this.messageTypes = messageTypes;
147+
}
148+
149+
public Type BindToType(string assemblyName, string typeName)
150+
{
151+
return messageTypes.FirstOrDefault(messageType => messageType.FullName == typeName);
152+
}
153+
154+
public void BindToName(Type serializedType, out string assemblyName, out string typeName)
155+
{
156+
assemblyName = serializedType.Assembly.FullName;
157+
typeName = serializedType.FullName;
158+
}
159+
}
160+
#endregion
161+
162+
class MyNativeIntegrationMessage
163+
{
164+
165+
}
166+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
using System;
2+
using System.IO;
3+
using System.Xml.Linq;
4+
using Newtonsoft.Json;
5+
6+
#region XContainerJsonConverter
7+
8+
using NewtonsoftJsonSerializer = Newtonsoft.Json.JsonSerializer;
9+
10+
class XmlJsonConverter : JsonConverter
11+
{
12+
public override void WriteJson(JsonWriter writer, object value, NewtonsoftJsonSerializer serializer)
13+
{
14+
var xcontainer = (XContainer) value;
15+
writer.WriteValue(xcontainer.ToString(SaveOptions.DisableFormatting));
16+
}
17+
18+
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, NewtonsoftJsonSerializer serializer)
19+
{
20+
if (reader.TokenType == JsonToken.Null)
21+
{
22+
return null;
23+
}
24+
25+
if (reader.TokenType != JsonToken.String)
26+
{
27+
throw new Exception($"Unexpected token or value when parsing XContainer. Token: {reader.TokenType}, Value: {reader.Value}");
28+
}
29+
30+
var value = (string) reader.Value;
31+
if (objectType == typeof(XDocument))
32+
{
33+
try
34+
{
35+
return XDocument.Load(new StringReader(value));
36+
}
37+
catch (Exception exception)
38+
{
39+
throw new Exception($"Error parsing XContainer string: {reader.Value}", exception);
40+
}
41+
}
42+
43+
return XElement.Load(new StringReader(value));
44+
}
45+
46+
public override bool CanConvert(Type objectType)
47+
{
48+
return typeof(XContainer).IsAssignableFrom(objectType);
49+
}
50+
}
51+
#endregion
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using Newtonsoft.Json;
2+
using NServiceBus;
3+
4+
class XmlUsage
5+
{
6+
void UseConverter(EndpointConfiguration endpointConfiguration)
7+
{
8+
#region UseConverter
9+
10+
var settings = new JsonSerializerSettings
11+
{
12+
TypeNameHandling = TypeNameHandling.Auto,
13+
Converters =
14+
{
15+
new XmlJsonConverter()
16+
}
17+
};
18+
19+
var serialization = endpointConfiguration.UseSerialization<NewtonsoftJsonSerializer>();
20+
serialization.Settings(settings);
21+
22+
#endregion
23+
}
24+
}

Snippets/Newtonsoft/Newtonsoft_5/prerelease.txt

Whitespace-only changes.

0 commit comments

Comments
 (0)