<PackageReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning" Version="2.3.0" />
<PackageReference Include="NServiceBus" Version="7.2.0" />
<PackageReference Include="NServiceBus.MSDependencyInjection" Version="0.1.4" />
<PackageReference Include="NServiceBus.RabbitMQ" Version="5.1.2" />
<PackageReference Include="NServiceBus.SagaAudit" Version="3.0.1" />
<PackageReference Include="NServiceBus.Newtonsoft.Json" Version="2.2.0" />
<PackageReference Include="NServiceBus.Serilog" Version="6.5.0" />
<PackageReference Include="Serilog.Sinks.Trace" Version="2.1.0" />
<PackageReference Include="Serilog.Formatting.Compact" Version="1.1.0" />
<PackageReference Include="Steeltoe.Extensions.Configuration.CloudFoundryCore" Version="2.3.0" />
<PackageReference Include="Steeltoe.Extensions.Logging.SerilogDynamicLogger"
Version="2.3.0" />
<PackageReference Include="Steeltoe.Management.CloudFoundryCore" Version="2.3.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="4.0.1" />
var settings = new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver(),
ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor,
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
};
var serialization = endpointConfiguration.UseSerialization<NewtonsoftSerializer>();
serialization.Settings(settings);
serialization.WriterCreator(s =>
{
var streamWriter = new StreamWriter(s, new UTF8Encoding(false));
return new JsonTextWriter(streamWriter);
});
public class ShipOrder : ICommand
{
public string OrderId { get; set; }
[JsonIgnore]
public string OrderName { get; set; }
}
Enabled Serilog tracing too. Upon running the application, I am able to see the property OrderName as part of sent message even though I wanted to exclude from serialization. Please find the logs below.
{"@t":"2019-11-29T10:42:02.6394421Z","@mt":"Sent message {OutgoingMessageType} {OutgoingMessageId}.","OutgoingMessage":{"OrderId":"c0652686-8cca-4697-946e-ce7c382fd0ee","OrderName":"Shoes","$type":"ShipOrder"},"UnicastRoutes":["Shipping"],"OriginatingHostId":"e96e4d21699770c86ae326d10b0df3e8","MessageIntent":"Send","OriginatingEndpoint":"Shipping","OriginatingMachine":"VW10P98","OriginatingSagaId":"5374c5c9-f4c7-4a05-ad0e-ab1400b04377","OriginatingSagaType":"Shipping.ShippingPolicy, Shipping, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null","RelatedTo":"92c3a62b-af1a-43ab-9851-ab1400b04378","ReplyToAddress":"Shipping","OutgoingMessageId":"69d2667b-b2d0-406f-86a4-ab1400b057b8","OutgoingMessageType":"Messages.ShipOrder","CorrelationId":"765c1ee4-4495-4482-9e69-ab1400b04350","ConversationId":"a16fffa5-da76-402f-8830-ab1400b04350","IncomingMessageId":"92c3a62b-af1a-43ab-9851-ab1400b04378","IncomingMessageType":"Messages.OrderBilled","SourceContext":"Messages.OrderBilled","ProcessingEndpoint":"Shipping"}
{"@t":"2019-11-29T10:42:09.4894892Z","@mt":"Receive message {IncomingMessageType} {IncomingMessageId}.","IncomingMessage":{"OrderId":"c0652686-8cca-4697-946e-ce7c382fd0ee","OrderName":null,"$type":"ShipOrder"},"OriginatingHostId":"e96e4d21699770c86ae326d10b0df3e8","MessageIntent":"Send","NonDurableMessage":"False","OriginatingEndpoint":"Shipping","OriginatingMachine":"VW10P8","OriginatingSagaId":"5374c5c9-f4c7-4a05-ad0e-ab1400b04377","OriginatingSagaType":"Shipping.ShippingPolicy, Shipping, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null","RelatedTo":"92c3a62b-af1a-43ab-9851-ab1400b04378","ReplyToAddress":"Shipping","TimeSent":"2019-11-29T10:42:02.6571900Z","IncomingMessageId":"69d2667b-b2d0-406f-86a4-ab1400b057b8","IncomingMessageType":"Messages.ShipOrder","CorrelationId":"765c1ee4-4495-4482-9e69-ab1400b04350","ConversationId":"a16fffa5-da76-402f-8830-ab1400b04350","SourceContext":"Messages.ShipOrder","ProcessingEndpoint":"Shipping"}
My real issue is with EF Core entity classes and I wanted to exclude navigation properties to avoid infinite looping. But unfortunately huge payload is getting created even after placing JsonIgnore
attribute. Also message attributes appear in pascal case, even though the CamelCasePropertyNamesContractResolver
is specified as part of Json serialization settings. I am kind of puzzled here with these behaviors.