{"record":{"id":"81c493b123c57925","repo":"dotnet/wpf","slug":"sr-serializerproviderdefaultfileextensionnull","errorCode":null,"errorMessage":"SR.SerializerProviderDefaultFileExtensionNull","messagePattern":"SR\\.SerializerProviderDefaultFileExtensionNull","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Documents/Serialization/SerializerDescriptor.cs","lineNumber":78,"sourceCode":"            )\n        {\n\n            ArgumentNullException.ThrowIfNull(factoryInstance);\n            if (factoryInstance.DisplayName == null)\n            {\n                throw new ArgumentException(SR.SerializerProviderDisplayNameNull);\n            }\n            if (factoryInstance.ManufacturerName == null)\n            {\n                throw new ArgumentException(SR.SerializerProviderManufacturerNameNull);\n            }\n            if (factoryInstance.ManufacturerWebsite == null)\n            {\n                throw new ArgumentException(SR.SerializerProviderManufacturerWebsiteNull);\n            }\n            if (factoryInstance.DefaultFileExtension == null)\n            {\n                throw new ArgumentException(SR.SerializerProviderDefaultFileExtensionNull);\n            }\n\n            SerializerDescriptor sd = new SerializerDescriptor\n            {\n                _displayName = factoryInstance.DisplayName,\n                _manufacturerName = factoryInstance.ManufacturerName,\n                _manufacturerWebsite = factoryInstance.ManufacturerWebsite,\n                _defaultFileExtension = factoryInstance.DefaultFileExtension,\n\n                // When this is called with an instantiated factory object, it must be loadable\n                _isLoadable = true\n            };\n\n            Type factoryType = factoryInstance.GetType();\n            sd._assemblyName = factoryType.Assembly.FullName;\n            sd._assemblyPath = factoryType.Assembly.Location;\n            sd._assemblyVersion = factoryType.Assembly.GetName().Version;\n            sd._factoryInterfaceName = factoryType.FullName;","sourceCodeStart":60,"sourceCodeEnd":96,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Documents/Serialization/SerializerDescriptor.cs#L60-L96","documentation":"SerializerDescriptor.CreateFromFactoryInstance throws ArgumentException (SR.SerializerProviderDefaultFileExtensionNull) when the ISerializerFactory's DefaultFileExtension property is null. The default file extension is required to build the SaveFileDialog filter and to associate saved documents with the serializer.","triggerScenarios":"Calling CreateFromFactoryInstance or SerializerProvider.RegisterSerializer with a factory whose DefaultFileExtension returns null.","commonSituations":"Custom ISerializerFactory implementations forgetting DefaultFileExtension; a factory reading the extension from configuration that is missing.","solutions":["Set DefaultFileExtension to a non-null extension (e.g. \".myext\") in the factory implementation","Fall back to a default extension when configuration is absent","Pre-validate factory.DefaultFileExtension before calling RegisterSerializer"],"exampleFix":"// before\npublic string DefaultFileExtension => _settings.Extension; // null if not configured\n// after\npublic string DefaultFileExtension => _settings?.Extension ?? \".myext\";","handlingStrategy":"validation","validationCode":"if (string.IsNullOrEmpty(factory.DefaultFileExtension))\n    throw new InvalidOperationException(\"Serializer DefaultFileExtension must be set before registration\");","typeGuard":"bool HasFileExtension(ISerializerFactory f) => !string.IsNullOrEmpty(f.DefaultFileExtension);","tryCatchPattern":"try { SerializerProvider.RegisterSerializer(descriptor); }\ncatch (ArgumentException) { /* supply DefaultFileExtension and retry */ }","preventionTips":["Default the extension (e.g. \".myext\") when configuration is missing","Cover all four required properties in factory unit tests"],"tags":["wpf","serializer","null-argument","argumentexception"],"backgroundTag":"null-argument","analyzedSha":"81131a70a4c573cd62748a5c36908fc4d662daa9","analyzedAt":"2026-09-14T10:12:48.479Z","contentChangedAt":"2026-09-14T10:12:48.479Z","schemaVersion":2},"datasetVersion":"2026-09-21T21:30:21.729Z"}