潜在的に最も簡単な方法は、カスタムシリアライザ定義を記述することです。次の例では、NServiceBus v6で使用可能なデフォルトのXmlSerializerとJsonSerializerが使用されていることを前提としています。
public class CustomJsonSerializer : SerializationDefinition
{
public override Func<IMessageMapper, IMessageSerializer> Configure(ReadOnlySettings settings)
{
var xmlSerializerDefinition = new XmlSerializer();
var xmlSerializerFactory = xmlSerializerDefinition.Configure(settings);
var jsonSerializerDefinition = new JsonSerializer();
var jsonSerializerFactory = jsonSerializerDefinition.Configure(settings);
return mapper => new DecoratorSerializer(xmlSerializerFactory(mapper), jsonSerializerFactory(mapper));
}
}
カスタム・シリアライザの定義を書くには、それらがV4の終点に向けて標的化されている場合のXmlSerializerにメッセージタイプを転送するためのカスタムロジックを持つシリアライザデコレータを書きます。
class DecoratorSerializer : IMessageSerializer
{
IMessageSerializer xmlSerializer;
IMessageSerializer jsonSerializer;
public DecoratorSerializer(IMessageSerializer xmlSerializer, IMessageSerializer jsonSerializer)
{
this.xmlSerializer = xmlSerializer;
this.jsonSerializer = jsonSerializer;
}
public void Serialize(object message, Stream stream)
{
if (message.GetType() == typeof(MyMessage))
{
xmlSerializer.Serialize(message, stream);
}
else
{
jsonSerializer.Serialize(message, stream);
}
}
public object[] Deserialize(Stream stream, IList<Type> messageTypes = null)
{
return jsonSerializer.Deserialize(stream, messageTypes);
}
public string ContentType
{
get { return jsonSerializer.ContentType; }
}
}
が
this github repoで見つけることができ、次の
endpointConfiguration.UseSerializer<CustomJsonSerializer>();
ワーキングサンプルのようなCustomSerializerを使用しています。このサンプルではコマンドを使用していますが、PubSubでもこのアプローチが有効です。唯一の注意点は、特定のメッセージタイプが常に1つのフォーマットを使用することです。したがって、同じイベントをXmlで一度公開したり、Jsonで他の公開することはできません。
v4はすでに複数のシリアライザをサポートしていますhttps://docs.particular.net/nservicebus/serialization/?version=core_4 v4エンドポイントをJsonに切り替えるのはなぜですか?それとも、そのエンドポイントにXmlで送信する送信者がまだありますか?はいの場合は、v6のJsonに切り替えるために何をしましたか? –
v6とJSONへの切り替えは、システム全体の再設計と部品の交換を一度に1つずつ行うことによって促進されます。 JSONは、これが私たちがRESTエンドポイント、Javaエンドポイントでのコミュニケーションで使用するものであるために選ばれました... –
私は短い時間枠で何かを考え出します。その間、http://www.newtonsoft.com/json/help/html/ConvertingJSONandXML.htmを使用してみましたか? –