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); }
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); }