| File: WebEventData\WebEventDescriptorReader.cs | Web Access |
| Project: src\aspnetcore\src\Components\Web\src\Microsoft.AspNetCore.Components.Web.csproj (Microsoft.AspNetCore.Components.Web) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. #nullable enable using System.Text.Json; using Microsoft.AspNetCore.Components.RenderTree; namespace Microsoft.AspNetCore.Components.Web; internal static class WebEventDescriptorReader { private static readonly JsonEncodedText EventHandlerIdKey = JsonEncodedText.Encode("eventHandlerId"); private static readonly JsonEncodedText EventNameKey = JsonEncodedText.Encode("eventName"); private static readonly JsonEncodedText EventFieldInfoKey = JsonEncodedText.Encode("eventFieldInfo"); private static readonly JsonEncodedText ComponentIdKey = JsonEncodedText.Encode("componentId"); private static readonly JsonEncodedText FieldValueKey = JsonEncodedText.Encode("fieldValue"); internal static WebEventDescriptor Read(JsonElement jsonElement) { var descriptor = new WebEventDescriptor(); foreach (var property in jsonElement.EnumerateObject()) { if (property.NameEquals(EventHandlerIdKey.EncodedUtf8Bytes)) { descriptor.EventHandlerId = property.Value.GetUInt64(); } else if (property.NameEquals(EventNameKey.EncodedUtf8Bytes)) { descriptor.EventName = property.Value.GetString()!; } else if (property.NameEquals(EventFieldInfoKey.EncodedUtf8Bytes)) { descriptor.EventFieldInfo = ReadEventFieldInfo(property.Value); } else { throw new JsonException($"Unknown property {property.Name}"); } } return descriptor; } private static EventFieldInfo? ReadEventFieldInfo(JsonElement jsonElement) { if (jsonElement.ValueKind is JsonValueKind.Null) { return null; } var eventFieldInfo = new EventFieldInfo(); foreach (var property in jsonElement.EnumerateObject()) { if (property.NameEquals(ComponentIdKey.EncodedUtf8Bytes)) { eventFieldInfo.ComponentId = property.Value.GetInt32(); } else if (property.NameEquals(FieldValueKey.EncodedUtf8Bytes)) { if (property.Value.ValueKind is JsonValueKind.True or JsonValueKind.False) { eventFieldInfo.FieldValue = property.Value.GetBoolean(); } else { eventFieldInfo.FieldValue = property.Value.GetString()!; } } else { throw new JsonException($"Unknown property {property.Name}"); } } return eventFieldInfo; } }