/
vshmidt
/
masstransit
Обзор
Документация
Войти
/
vshmidt
/
masstransit
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
src/MassTransit/Serialization/EnvelopeSerializerContext.cs
100 строк
4 KB
Chris Patterson
Fixed #3344 - added internal code analysis types for NETSTANDARD2.0 and NET462 builds to allow proper nullable output types for analyzer
06 мар 2023, 21:47
06 мар 2023, 21:47
715a0a2
Код
Авторство
О чём код?
#nullable enable namespace MassTransit.Serialization { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Linq; public abstract class BaseSerializerContext : SerializerContext { readonly MessageContext _context; readonly IObjectDeserializer _deserializer; Guid? _conversationId; Guid? _correlationId; Uri? _destinationAddress; Uri? _faultAddress; Headers? _headers; Guid? _initiatorId; Guid? _messageId; Guid? _requestId; Uri? _responseAddress; Uri? _sourceAddress; protected BaseSerializerContext(IObjectDeserializer deserializer, MessageContext context, string[] supportedMessageTypes) { _context = context; _deserializer = deserializer; SupportedMessageTypes = supportedMessageTypes; ObjectDeserializer.Current = deserializer; } public Guid? MessageId => _messageId ??= _context.MessageId; public Guid? RequestId => _requestId ??= _context.RequestId; public Guid? CorrelationId => _correlationId ??= _context.CorrelationId; public Guid? ConversationId => _conversationId ??= _context.ConversationId; public Guid? InitiatorId => _initiatorId ??= _context.InitiatorId; public DateTime? ExpirationTime => _context.ExpirationTime; public Uri? SourceAddress => _sourceAddress ??= _context.SourceAddress; public Uri? DestinationAddress => _destinationAddress ??= _context.DestinationAddress; public Uri? ResponseAddress => _responseAddress ??= _context.ResponseAddress; public Uri? FaultAddress => _faultAddress ??= _context.FaultAddress; public DateTime? SentTime => _context.SentTime; public Headers Headers => _headers ??= _context.Headers; public HostInfo Host => _context.Host; public string[] SupportedMessageTypes { get; } public T? DeserializeObject<T>(object? value, T? defaultValue = default) where T : class { return _deserializer.DeserializeObject(value, defaultValue); } public T? DeserializeObject<T>(object? value, T? defaultValue = null) where T : struct { return _deserializer.DeserializeObject(value, defaultValue); } public MessageBody SerializeObject(object? value) { return _deserializer.SerializeObject(value); } public abstract bool TryGetMessage<T>(out T? message) where T : class; public abstract bool TryGetMessage(Type messageType, [NotNullWhen(true)] out object? message); public abstract IMessageSerializer GetMessageSerializer(); public abstract IMessageSerializer GetMessageSerializer<T>(MessageEnvelope envelope, T message) where T : class; public abstract IMessageSerializer GetMessageSerializer(object message, string[] messageTypes); public abstract Dictionary<string, object> ToDictionary<T>(T? message) where T : class; public virtual bool IsSupportedMessageType<T>() where T : class { var typeUrn = MessageUrn.ForTypeString<T>(); return SupportedMessageTypes.Any(x => typeUrn.Equals(x, StringComparison.OrdinalIgnoreCase)); } public virtual bool IsSupportedMessageType(Type messageType) { var typeUrn = MessageUrn.ForTypeString(messageType); return SupportedMessageTypes.Any(x => typeUrn.Equals(x, StringComparison.OrdinalIgnoreCase)); } } }