{"record":{"id":"44fb3acf877bcc54","repo":"JamesNK/Newtonsoft.Json","slug":"a-name-is-required-when-setting-property-name-stat-44fb3a","errorCode":null,"errorMessage":"A name is required when setting property name state.","messagePattern":"A name is required when setting property name state\\.","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"Src/Newtonsoft.Json/JsonWriter.cs","lineNumber":1710,"sourceCode":"        /// <param name=\"token\">The <see cref=\"JsonToken\"/> being written.</param>\n        /// <param name=\"value\">The value being written.</param>\n        protected void SetWriteState(JsonToken token, object value)\n        {\n            switch (token)\n            {\n                case JsonToken.StartObject:\n                    InternalWriteStart(token, JsonContainerType.Object);\n                    break;\n                case JsonToken.StartArray:\n                    InternalWriteStart(token, JsonContainerType.Array);\n                    break;\n                case JsonToken.StartConstructor:\n                    InternalWriteStart(token, JsonContainerType.Constructor);\n                    break;\n                case JsonToken.PropertyName:\n                    if (!(value is string s))\n                    {\n                        throw new ArgumentException(\"A name is required when setting property name state.\", nameof(value));\n                    }\n\n                    InternalWritePropertyName(s);\n                    break;\n                case JsonToken.Comment:\n                    InternalWriteComment();\n                    break;\n                case JsonToken.Raw:\n                    InternalWriteRaw();\n                    break;\n                case JsonToken.Integer:\n                case JsonToken.Float:\n                case JsonToken.String:\n                case JsonToken.Boolean:\n                case JsonToken.Date:\n                case JsonToken.Bytes:\n                case JsonToken.Null:\n                case JsonToken.Undefined:","sourceCodeStart":1692,"sourceCodeEnd":1728,"githubUrl":"https://github.com/JamesNK/Newtonsoft.Json/blob/4f73e74372445108d2c1bda37b36e6f5e43402e0/Src/Newtonsoft.Json/JsonWriter.cs#L1692-L1728","documentation":"Thrown on the synchronous path (JsonWriter.cs) inside InternalWriteToken when writing a JsonToken.PropertyName whose value is not a string. JSON property names are required to be strings; a non-string value is rejected with ArgumentException to prevent malformed output. Identical guard to the async variant.","triggerScenarios":"Calling WritePropertyName with a non-string, or WriteToken/WriteTokenAsync routing a PropertyName token whose value is not a string; programmatic token construction with non-string names.","commonSituations":"Custom writers/token builders boxing numbers or objects as property names; dictionary serialization with non-string keys not pre-stringified; copy/paste of tokens from a non-conforming source.","solutions":["Pass only string values to WritePropertyName.","Ensure PropertyName tokens in any JToken/WriteToken pipeline carry a string value.","Stringify non-string keys before writing (e.g. key.ToString())."],"exampleFix":"// before\nwriter.WriteToken(JsonToken.PropertyName, 42);\n\n// after\nwriter.WritePropertyName(\"42\");","handlingStrategy":"validation","validationCode":"if (value is string name)\n{\n    writer.WritePropertyName(name);\n}","typeGuard":"static bool IsValidPropertyName(object value) => value is string;","tryCatchPattern":null,"preventionTips":["Pass only strings to WritePropertyName / WriteToken(PropertyName, ...).","Convert dictionary keys to strings before writing.","Validate token values in custom pipelines before writing."],"tags":["json-writer","type-mismatch","json-spec"],"analyzedSha":"4f73e74372445108d2c1bda37b36e6f5e43402e0","analyzedAt":"2026-08-07T06:10:08.596Z","schemaVersion":2},"datasetVersion":"2026-08-07T07:17:06.508Z"}