File: Backchannel\BackchannelJsonSerializerContext.cs
Web Access
Project: src\src\Aspire.Cli\Aspire.Cli.Tool.csproj (aspire)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System.Diagnostics.CodeAnalysis;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Text.Json.Serialization.Metadata;
using Aspire.Cli.Commands;
using Aspire.Cli.Commands.Sdk;
using Aspire.Hosting.Ats;
using Spectre.Console;
using StreamJsonRpc;
using StreamJsonRpc.Protocol;
using StreamJsonRpc.Reflection;
 
namespace Aspire.Cli.Backchannel;
 
[JsonSerializable(typeof(RuntimeSpec))]
[JsonSerializable(typeof(CommandSpec))]
[JsonSerializable(typeof(string[]))]
[JsonSerializable(typeof(bool))]
[JsonSerializable(typeof(long))]
[JsonSerializable(typeof(DashboardUrlsState))]
[JsonSerializable(typeof(JsonElement))]
[JsonSerializable(typeof(IAsyncEnumerable<RpcResourceState>))]
[JsonSerializable(typeof(MessageFormatterEnumerableTracker.EnumeratorResults<RpcResourceState>))]
[JsonSerializable(typeof(IAsyncEnumerable<BackchannelLogEntry>))]
[JsonSerializable(typeof(MessageFormatterEnumerableTracker.EnumeratorResults<BackchannelLogEntry>))]
[JsonSerializable(typeof(IAsyncEnumerable<PublishingActivity>))]
[JsonSerializable(typeof(MessageFormatterEnumerableTracker.EnumeratorResults<PublishingActivity>))]
[JsonSerializable(typeof(RequestId))]
[JsonSerializable(typeof(IEnumerable<DisplayLineState>))]
[JsonSerializable(typeof(PublishingPromptInputAnswer[]))]
[JsonSerializable(typeof(ValidationResult))]
[JsonSerializable(typeof(IAsyncEnumerable<CommandOutput>))]
[JsonSerializable(typeof(MessageFormatterEnumerableTracker.EnumeratorResults<CommandOutput>))]
[JsonSerializable(typeof(EnvVar))]
[JsonSerializable(typeof(List<EnvVar>))]
[JsonSerializable(typeof(List<string>))]
[JsonSerializable(typeof(bool?))]
[JsonSerializable(typeof(AppHostProjectSearchResultPoco))]
[JsonSerializable(typeof(DashboardMcpConnectionInfo))]
[JsonSerializable(typeof(AppHostInformation))]
[JsonSerializable(typeof(ResourceSnapshot))]
[JsonSerializable(typeof(ResourceSnapshot[]))]
[JsonSerializable(typeof(List<ResourceSnapshot>))]
[JsonSerializable(typeof(IAsyncEnumerable<ResourceSnapshot>))]
[JsonSerializable(typeof(MessageFormatterEnumerableTracker.EnumeratorResults<ResourceSnapshot>))]
[JsonSerializable(typeof(ResourceSnapshotMcpServer))]
[JsonSerializable(typeof(ResourceLogLine))]
[JsonSerializable(typeof(ResourceLogLine[]))]
[JsonSerializable(typeof(IAsyncEnumerable<ResourceLogLine>))]
[JsonSerializable(typeof(MessageFormatterEnumerableTracker.EnumeratorResults<ResourceLogLine>))]
[JsonSerializable(typeof(Dictionary<string, JsonElement>))]
[JsonSerializable(typeof(Dictionary<string, string>))]
[JsonSerializable(typeof(CapabilitiesInfo))]
[JsonSerializable(typeof(CommonErrorData))]
// V2 API request/response types
[JsonSerializable(typeof(GetCapabilitiesRequest))]
[JsonSerializable(typeof(GetCapabilitiesResponse))]
[JsonSerializable(typeof(GetAppHostInfoRequest))]
[JsonSerializable(typeof(GetAppHostInfoResponse))]
[JsonSerializable(typeof(GetDashboardInfoRequest))]
[JsonSerializable(typeof(GetDashboardInfoResponse))]
[JsonSerializable(typeof(GetResourcesRequest))]
[JsonSerializable(typeof(GetResourcesResponse))]
[JsonSerializable(typeof(WatchResourcesRequest))]
[JsonSerializable(typeof(GetConsoleLogsRequest))]
[JsonSerializable(typeof(CallMcpToolRequest))]
[JsonSerializable(typeof(CallMcpToolResponse))]
[JsonSerializable(typeof(McpToolContentItem))]
[JsonSerializable(typeof(McpToolContentItem[]))]
[JsonSerializable(typeof(StopAppHostRequest))]
[JsonSerializable(typeof(StopAppHostResponse))]
internal partial class BackchannelJsonSerializerContext : JsonSerializerContext
{
    [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2026:RequiresUnreferencedCode", Justification = "Using the Json source generator.")]
    [UnconditionalSuppressMessage("AotAnalysis", "IL3050:RequiresDynamicCode", Justification = "Using the Json source generator.")]
    internal static SystemTextJsonFormatter CreateRpcMessageFormatter()
    {
        var formatter = new SystemTextJsonFormatter();
        formatter.JsonSerializerOptions = CreateJsonSerializerOptions();
        return formatter;
    }
 
    internal static JsonSerializerOptions CreateJsonSerializerOptions()
    {
        var options = new JsonSerializerOptions(ModelContextProtocol.McpJsonUtilities.DefaultOptions);
        options.TypeInfoResolver = JsonTypeInfoResolver.Combine(
            Default,
            ModelContextProtocol.McpJsonUtilities.DefaultOptions.TypeInfoResolver
        );
        return options;
    }
}