// Copyright (c) Microsoft. All rights reserved. using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Text.Encodings.Web; using System.Text.Json; using System.Text.Json.Serialization; namespace Microsoft.Agents.AI.GitHub.Copilot; /// /// Provides utility methods and configurations for JSON serialization operations within the GitHub Copilot agent implementation. /// internal static partial class GitHubCopilotJsonUtilities { /// /// 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(GitHubCopilotAgentSession))] [JsonSerializable(typeof(Dictionary))] [ExcludeFromCodeCoverage] private sealed partial class JsonContext : JsonSerializerContext; }