in extensions/Worker.Extensions.Storage.Queues/src/JsonConverters/QueueMessageJsonConverter.cs [15:84]
public override QueueMessage? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
if (reader.TokenType is not JsonTokenType.StartObject)
{
throw new JsonException("JSON payload expected to start with StartObject token.");
}
string messageId = String.Empty;
string popReceipt = String.Empty;
string messageText = String.Empty;
long dequeueCount = 1;
DateTime? nextVisibleOn = null;
DateTime? insertedOn = null;
DateTime? expiresOn = null;
var startDepth = reader.CurrentDepth;
while (reader.Read())
{
if (reader.TokenType is JsonTokenType.EndObject && reader.CurrentDepth == startDepth)
{
return QueuesModelFactory.QueueMessage(
messageId,
popReceipt,
messageText,
dequeueCount,
nextVisibleOn,
insertedOn,
expiresOn
);
}
if (reader.TokenType is not JsonTokenType.PropertyName)
{
continue;
}
var propertyName = reader.GetString();
reader.Read();
switch (propertyName?.ToLowerInvariant())
{
case "messageid":
messageId = reader.GetString() ?? throw new JsonException("JSON payload must contain a MessageId.");
break;
case "popreceipt":
popReceipt = reader.GetString() ?? throw new JsonException("JSON payload must contain a PopReceipt.");
break;
case "messagetext":
messageText = reader.GetString() ?? throw new JsonException("JSOn payload must contain a MessageText.");
break;
case "dequeuecount":
dequeueCount = reader.GetInt64();
break;
case "nextvisibleon":
nextVisibleOn = reader.GetDateTime();
break;
case "insertedon":
insertedOn = reader.GetDateTime();
break;
case "expireson":
expiresOn = reader.GetDateTime();
break;
default:
break;
}
}
throw new JsonException("JSON payload expected to end with EndObject token.");
}