{"record":{"id":"cd1229a9c4b1687a","repo":"SignalR/SignalR","slug":"serializer","errorCode":null,"errorMessage":"serializer","messagePattern":"serializer","errorType":"exception","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.AspNet.SignalR.Core/Json/JsonSerializerExtensions.cs","lineNumber":29,"sourceCode":"namespace Microsoft.AspNet.SignalR.Json\n{\n    /// <summary>\n    /// Extensions for <see cref=\"JsonSerializer\"/>.\n    /// </summary>\n    public static class JsonSerializerExtensions\n    {\n        /// <summary>\n        /// Deserializes the JSON to a .NET object.\n        /// </summary>\n        /// <param name=\"serializer\">The serializer</param>\n        /// <typeparam name=\"T\">The <see cref=\"System.Type\"/> of object being deserialized.</typeparam>\n        /// <param name=\"json\">The JSON to deserialize</param>\n        /// <returns>The deserialized object from the JSON string.</returns>\n        public static T Parse<T>(this JsonSerializer serializer, string json)\n        {\n            if (serializer == null)\n            {\n                throw new ArgumentNullException(\"serializer\");\n            }\n\n            using (var reader = new StringReader(json))\n            {\n                return (T)serializer.Deserialize(reader, typeof(T));\n            }\n        }\n\n        /// <summary>\n        /// Deserializes the JSON to a .NET object.\n        /// </summary>\n        /// <param name=\"serializer\">The serializer</param>\n        /// <typeparam name=\"T\">The <see cref=\"System.Type\"/> of object being deserialized.</typeparam>\n        /// <param name=\"jsonBuffer\">The JSON buffer to deserialize</param>\n        /// <param name=\"encoding\">The encoding to use.</param>\n        /// <returns>The deserialized object from the JSON string.</returns>\n        public static T Parse<T>(this JsonSerializer serializer, ArraySegment<byte> jsonBuffer, Encoding encoding)\n        {","sourceCodeStart":11,"sourceCodeEnd":47,"githubUrl":"https://github.com/SignalR/SignalR/blob/693053b89a9e1f5ce819e3233ed159a6409de22b/src/Microsoft.AspNet.SignalR.Core/Json/JsonSerializerExtensions.cs#L11-L47","documentation":"JsonSerializerExtensions.Parse<T>(string) is an extension method on JsonSerializer; C# extension methods are invoked as static calls, so a null receiver does not NRE at the call site — the method's explicit guard is what catches it. It then opens a StringReader and deserializes, requiring a real serializer.","triggerScenarios":"Calling serializer.Parse<T>(json) where the `serializer` variable is null. Because it is extension-method syntax, the null slips past the compiler.","commonSituations":"A resolver returning a null JsonSerializer; a service field that was never initialized; a JsonSerializer obtained via a factory that returned null under an error condition.","solutions":["Ensure the JsonSerializer is constructed/resolved before calling Parse.","If resolving from the dependency resolver, verify resolver.Resolve<JsonSerializer>() is non-null.","Initialize the serializer field eagerly (e.g. in the constructor) rather than lazily without a null check."],"exampleFix":"// before\nJsonSerializer _serializer; // never assigned\nvar msg = _serializer.Parse<Message>(json); // throws ArgumentNullException\n\n// after\n_serializer = new JsonSerializer();\nvar msg = _serializer.Parse<Message>(json);","handlingStrategy":"validation","validationCode":"if (serializer == null)\n    throw new InvalidOperationException(\"JsonSerializer was not initialized.\");\nvar value = serializer.Parse<T>(json);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Initialize JsonSerializer fields eagerly in the constructor.","Resolve from the resolver and assert non-null at startup.","Remember extension methods do not guard the receiver for you."],"tags":["json","serializer","null-argument","serialization","extension-method"],"backgroundTag":null,"analyzedSha":"693053b89a9e1f5ce819e3233ed159a6409de22b","analyzedAt":"2026-08-13T22:23:59.793Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}