| File: WebEventData\ChangeEventArgsReader.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; namespace Microsoft.AspNetCore.Components.Web; internal static class ChangeEventArgsReader { private static readonly JsonEncodedText ValueKey = JsonEncodedText.Encode("value"); internal static ChangeEventArgs Read(JsonElement jsonElement) { var changeArgs = new ChangeEventArgs(); foreach (var property in jsonElement.EnumerateObject()) { if (property.NameEquals(ValueKey.EncodedUtf8Bytes)) { var value = property.Value; switch (value.ValueKind) { case JsonValueKind.Null: break; case JsonValueKind.String: changeArgs.Value = value.GetString(); break; case JsonValueKind.True: case JsonValueKind.False: changeArgs.Value = value.GetBoolean(); break; case JsonValueKind.Array: changeArgs.Value = GetJsonElementStringArrayValue(value); break; default: throw new ArgumentException($"Unsupported {nameof(ChangeEventArgs)} value {jsonElement}."); } return changeArgs; } else { throw new JsonException($"Unknown property {property.Name}"); } } return changeArgs; } private static string?[] GetJsonElementStringArrayValue(JsonElement jsonElement) { var result = new string?[jsonElement.GetArrayLength()]; var elementIndex = 0; foreach (var arrayElement in jsonElement.EnumerateArray()) { if (arrayElement.ValueKind != JsonValueKind.String) { throw new InvalidOperationException( $"Unsupported {nameof(JsonElement)} value kind '{arrayElement.ValueKind}' " + $"(expected '{JsonValueKind.String}')."); } result[elementIndex] = arrayElement.GetString(); elementIndex++; } return result; } }