示例#1
0
        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);
        }
示例#2
0
        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 }));
        }