示例#1
0
        public bool TryReadMessage(ref ReadOnlySequence <byte> input, out object message)
        {
            var options = new JsonReaderOptions();
            var reader  = new Utf8JsonReader(input, options);


            if (!JsonDocument.TryParseValue(ref reader, out var doc))
            {
                message = default;
                return(false);
            }


            if (!doc.RootElement.TryGetProperty("$type", out var typeProp))
            {
                // throw new Exception("No '$type' in json.");
                message = default;
                return(false);
            }

            var name = typeProp.GetString();

            if (_messageResolver.TryGetMessageType(name, out var type))
            {
                reader  = new Utf8JsonReader(input, options);
                message = JsonSerializer.Deserialize(ref reader, type);
                input   = input.Slice(reader.BytesConsumed);
                return(true);
            }

            message = default;
            return(false);
        }
示例#2
0
        public bool TryReadMessage(ref ReadOnlySequence <byte> input, out object message)
        {
            if (!BinaryMessageHelpers.TryParseMessage(ref input, out var payload))
            {
                message = default;
                return(false);
            }

            var reader = new MessagePackReader(payload);

            _ = reader.ReadArrayHeader();
            var name = reader.ReadString();

            if (_messageResolver.TryGetMessageType(name, out var type))
            {
                message = MessagePackSerializer.Deserialize(type, ref reader);
                return(true);
            }

            message = default;
            return(false);
        }