public TextPayload(RawPayload rawPayload) { var encoding = Encoding.UTF8; ContentType = null; if (rawPayload.ContentType != null) { var contentType = new ContentType(rawPayload.ContentType); if (contentType.CharSet != null) { encoding = Encoding.GetEncoding(contentType.CharSet); contentType.CharSet = null; } ContentType = contentType.ToString(); } TypeHint = rawPayload.TypeHint; Body = encoding.GetString(rawPayload.Body); }
public object FromRaw <T>(RawPayload payload, IReadOnlyCollection <ITypeSchema> knownTypes) { if (payload == null) { throw new ArgumentNullException(nameof(payload)); } var serializer = GetRawSerializer(payload.ContentType); var typeSchema = payload.TypeHint != null ? knownTypes.FirstOrDefault(p => p.ContractName == payload.TypeHint) ?? knownTypes.FirstOrDefault(p => p.SchemaName == payload.TypeHint) : null; var type = typeSchema?.DotNetType ?? typeof(T); if (type == typeof(T)) { return(serializer.Deserialize <T>(payload.Body, typeSchema)); } var gMethod = typeof(IRawPayloadSerializer).GetMethod(nameof(IRawPayloadSerializer.Deserialize)); var method = gMethod.MakeGenericMethod(type); return(method.Invoke(serializer, new object[] { payload.Body, typeSchema })); }