{"record":{"id":"7ee106c1171b10c3","repo":"microsoft/aspire","slug":"expected-kubernetesmanifestresource-but-got-value-gettype","errorCode":null,"errorMessage":"Expected KubernetesManifestResource but got {value?.GetType()}.","messagePattern":"Expected KubernetesManifestResource but got (.+?)\\.","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/Aspire.Hosting.Kubernetes/Yaml/KubernetesManifestResourceYamlConverter.cs","lineNumber":26,"sourceCode":"namespace Aspire.Hosting.Kubernetes.Yaml;\n\ninternal sealed class KubernetesManifestResourceYamlConverter : IYamlTypeConverter\n{\n    public bool Accepts(Type type)\n    {\n        return type == typeof(KubernetesManifestResource);\n    }\n\n    public object? ReadYaml(IParser parser, Type type, ObjectDeserializer rootDeserializer)\n    {\n        throw new NotSupportedException($\"{nameof(KubernetesManifestResource)} does not support YAML deserialization.\");\n    }\n\n    public void WriteYaml(IEmitter emitter, object? value, Type type, ObjectSerializer serializer)\n    {\n        if (value is not KubernetesManifestResource manifest)\n        {\n            throw new InvalidOperationException($\"Expected {nameof(KubernetesManifestResource)} but got {value?.GetType()}.\");\n        }\n\n        emitter.Emit(new MappingStart());\n\n        WriteProperty(\"apiVersion\", manifest.ApiVersion, serializer);\n        WriteProperty(\"kind\", manifest.Kind, serializer);\n        WriteProperty(\"metadata\", manifest.Metadata, serializer);\n\n        foreach (var (key, fieldValue) in manifest.Fields)\n        {\n            WriteProperty(key, fieldValue, serializer);\n        }\n\n        emitter.Emit(new MappingEnd());\n    }\n\n    private static void WriteProperty(string name, object? value, ObjectSerializer serializer)\n    {","sourceCodeStart":8,"sourceCodeEnd":44,"githubUrl":"https://github.com/microsoft/aspire/blob/25830f84bd145686607ad00c057b3f84e2e51d43/src/Aspire.Hosting.Kubernetes/Yaml/KubernetesManifestResourceYamlConverter.cs#L8-L44","documentation":"WriteYaml of KubernetesManifestResourceYamlConverter expects the value being serialized to be exactly a KubernetesManifestResource. Any other type reaching this converter is an InvalidOperationException, indicating the converter was invoked for a type it does not handle (it only claims typeof(KubernetesManifestResource) in Accepts).","triggerScenarios":"Serializing an object graph where the converter is applied to a non-KubernetesManifestResource value — e.g. registering the converter globally and serializing other types, or passing a subclass/wrapper instead of the manifest resource (src/Aspire.Hosting.Kubernetes/Yaml/KubernetesManifestResourceYamlConverter.cs:26).","commonSituations":"Custom YamlDotNet pipelines that mis-route types; serializing a wrapper or projection of the manifest instead of the resource itself; reflection-based tooling that pulls the wrong object out of the app model.","solutions":["Pass the KubernetesManifestResource instance itself to the serializer, not a derived wrapper or unrelated object.","Verify converter registration: KubernetesManifestResourceYamlConverter should be bound only to typeof(KubernetesManifestResource).","If serializing related models, write dedicated converters for those types rather than reusing this one."],"exampleFix":"// before\nserializer.Serialize(writer, manifestWrapper); // wrong object type\n// after\nserializer.Serialize(writer, kubernetesManifestResource);","handlingStrategy":"type-guard","validationCode":"if (value is not KubernetesManifestResource) throw new ArgumentException(\"Serializer expects KubernetesManifestResource.\");","typeGuard":"static bool IsManifestResource(object? v) => v is KubernetesManifestResource;","tryCatchPattern":"try { yamlSerializer.Serialize(writer, value); } catch (InvalidOperationException ex) when (ex.Message.Contains(\"KubernetesManifestResource\")) { /* pass the manifest resource itself */ }","preventionTips":["Serialize the KubernetesManifestResource instance itself, not wrappers","Bind this converter only to typeof(KubernetesManifestResource)","Cover manifest serialization with a snapshot test"],"tags":["yaml","serialization","kubernetes","type-mismatch"],"backgroundTag":"type-mismatch","analyzedSha":"25830f84bd145686607ad00c057b3f84e2e51d43","analyzedAt":"2026-09-16T11:10:06.193Z","contentChangedAt":"2026-09-16T11:10:06.193Z","schemaVersion":2},"datasetVersion":"2026-09-21T04:17:39.646Z"}