// Copyright (c) Microsoft. All rights reserved. using System.Diagnostics.CodeAnalysis; using System.Text.Encodings.Web; using System.Text.Json; using System.Text.Json.Serialization; namespace Microsoft.Agents.AI.CopilotStudio; /// /// Provides utility methods and configurations for JSON serialization operations within the Copilot Studio agent implementation. /// internal static partial class CopilotStudioJsonUtilities { /// /// Gets the default instance used for JSON serialization operations. /// public static JsonSerializerOptions DefaultOptions { get; } = CreateDefaultOptions(); /// /// Creates and configures the default JSON serialization options. /// /// The configured options. private static JsonSerializerOptions CreateDefaultOptions() { // Copy the configuration from the source generated context. JsonSerializerOptions options = new(JsonContext.Default.Options) { Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping, }; // Chain in the resolvers from both AgentAbstractionsJsonUtilities and our source generated context. options.TypeInfoResolverChain.Clear(); options.TypeInfoResolverChain.Add(AgentAbstractionsJsonUtilities.DefaultOptions.TypeInfoResolver!); options.TypeInfoResolverChain.Add(JsonContext.Default.Options.TypeInfoResolver!); options.MakeReadOnly(); return options; } [JsonSourceGenerationOptions(JsonSerializerDefaults.Web, UseStringEnumConverter = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, NumberHandling = JsonNumberHandling.AllowReadingFromString)] [JsonSerializable(typeof(CopilotStudioAgentSession))] [ExcludeFromCodeCoverage] private sealed partial class JsonContext : JsonSerializerContext; }