{"record":{"id":"6aa03b43bf46ccc1","repo":"XINCGer/Unity3DTraining","slug":"type-registry-has-no-descriptor-for-type-name","errorCode":null,"errorMessage":"Type registry has no descriptor for type name '","messagePattern":"Type registry has no descriptor for type name '","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"NetWorkAndResources/Socket_Protobuff/Assets/Plugins/Google.Protobuf/JsonFormatter.cs","lineNumber":526,"sourceCode":"            var paths = (IList<string>)value.Descriptor.Fields[FieldMask.PathsFieldNumber].Accessor.GetValue(value);\n            writer.Write(FieldMask.ToJson(paths, DiagnosticOnly));\n        }\n\n        private void WriteAny(TextWriter writer, IMessage value)\n        {\n            if (DiagnosticOnly)\n            {\n                WriteDiagnosticOnlyAny(writer, value);\n                return;\n            }\n\n            string typeUrl = (string)value.Descriptor.Fields[Any.TypeUrlFieldNumber].Accessor.GetValue(value);\n            ByteString data = (ByteString)value.Descriptor.Fields[Any.ValueFieldNumber].Accessor.GetValue(value);\n            string typeName = Any.GetTypeName(typeUrl);\n            MessageDescriptor descriptor = settings.TypeRegistry.Find(typeName);\n            if (descriptor == null)\n            {\n                throw new InvalidOperationException(\"Type registry has no descriptor for type name '\" + typeName + \"'\");\n            }\n            IMessage message = descriptor.Parser.ParseFrom(data);\n            writer.Write(\"{ \");\n            WriteString(writer, AnyTypeUrlField);\n            writer.Write(NameValueSeparator);\n            WriteString(writer, typeUrl);\n\n            if (descriptor.IsWellKnownType)\n            {\n                writer.Write(PropertySeparator);\n                WriteString(writer, AnyWellKnownTypeValueField);\n                writer.Write(NameValueSeparator);\n                WriteWellKnownTypeValue(writer, descriptor, message);\n            }\n            else\n            {\n                WriteMessageFields(writer, message, true);\n            }","sourceCodeStart":508,"sourceCodeEnd":544,"githubUrl":"https://github.com/XINCGer/Unity3DTraining/blob/016f98412ea5e11756b286736f479b66ab6216d5/NetWorkAndResources/Socket_Protobuff/Assets/Plugins/Google.Protobuf/JsonFormatter.cs#L508-L544","documentation":"JsonFormatter.WriteAny throws InvalidOperationException when formatting a google.protobuf.Any whose embedded type name cannot be resolved in the formatter's TypeRegistry. The Any payload cannot be parsed without the descriptor for the wrapped message.","triggerScenarios":"Formatting a message containing an Any field whose type_url references a message type that was never added to JsonFormatter.Settings.WithTypeRegistry(...); parsing bytes of an unknown packed type.","commonSituations":"Cross-project Any usage where the receiving side never registered the sender's descriptor types; multi-package protos with only part of the descriptor set registered; plugin-generated types not passed to the registry.","solutions":["Build the formatter with JsonFormatter.Default.Settings.WithTypeRegistry(TypeRegistry.FromFiles(...all descriptor files...))","Add the descriptor of the Any's inner type to the registry","Use TypeRegistry.FromMessages<T1,T2,...> covering all types embedded in Any fields","Ensure the registry includes dependencies of the wrapped message"],"exampleFix":"// before\nvar formatter = new JsonFormatter(JsonFormatter.Default.Settings);\n// after\nvar settings = JsonFormatter.Default.Settings.WithTypeRegistry(TypeRegistry.FromMessages<MyWrappedMessage>());\nvar formatter = new JsonFormatter(settings);","handlingStrategy":"validation","validationCode":"var typeName = Any.GetTypeName(any.TypeUrl);\nif (settings.TypeRegistry.Find(typeName) == null) { throw new InvalidOperationException($\"Unregistered Any type: {typeName}\"); }","typeGuard":"bool IsRegistered(JsonFormatter.Settings s, Any a) => s.TypeRegistry.Find(Any.GetTypeName(a.TypeUrl)) != null;","tryCatchPattern":"try { json = formatter.Format(msg); } catch (InvalidOperationException ex) when (ex.Message.Contains(\"Type registry has no descriptor\")) { /* register type or skip Any formatting */ }","preventionTips":["Always create JsonFormatter with WithTypeRegistry covering all Any payload types","Use TypeRegistry.FromMessages<T...> for every packable message","Include transitive dependencies in the registry"],"tags":["csharp","protobuf","json","any"],"backgroundTag":"resource-not-found","analyzedSha":"016f98412ea5e11756b286736f479b66ab6216d5","analyzedAt":"2026-09-12T01:08:58.711Z","contentChangedAt":"2026-09-12T01:08:58.711Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}