| File: Adapters\AdapterFactory.cs | Web Access |
| Project: src\aspnetcore\src\Features\JsonPatch.SystemTextJson\src\Microsoft.AspNetCore.JsonPatch.SystemTextJson.csproj (Microsoft.AspNetCore.JsonPatch.SystemTextJson) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; using System.Collections; using System.Collections.Generic; using System.Text.Json.Nodes; using Microsoft.AspNetCore.JsonPatch.SystemTextJson.Internal; using Microsoft.AspNetCore.Shared; namespace Microsoft.AspNetCore.JsonPatch.SystemTextJson.Adapters; /// <summary> /// The default AdapterFactory to be used for resolving <see cref="IAdapter"/>. /// </summary> internal class AdapterFactory : IAdapterFactory { internal static AdapterFactory Default { get; } = new(); /// <inheritdoc /> public virtual IAdapter Create(object target) { ArgumentNullThrowHelper.ThrowIfNull(target); var typeToConvert = target.GetType(); if (typeToConvert.IsGenericType && typeToConvert.GetGenericTypeDefinition() == typeof(Dictionary<,>)) { return (IAdapter)Activator.CreateInstance(typeof(DictionaryAdapter<,>).MakeGenericType(typeToConvert.GenericTypeArguments[0], typeToConvert.GenericTypeArguments[1])); } return target switch { JsonObject => new JsonObjectAdapter(), JsonArray => new ListAdapter(), IList => new ListAdapter(), _ => new PocoAdapter() }; } }