{"record":{"id":"4d53185efa5b7ee4","repo":"ElectronNET/Electron.NET","slug":"invalid-value-for-pagesize-expected-string-or-an-object","errorCode":null,"errorMessage":"Invalid value for PageSize. Expected string or an object.","messagePattern":"Invalid value for PageSize\\. Expected string or an object\\.","errorType":"exception","errorClass":"JsonException","httpStatus":null,"severity":"error","filePath":"src/ElectronNET.API/Converter/PageSizeConverter.cs","lineNumber":23,"sourceCode":"using System.Text.Json.Serialization;\n\nnamespace ElectronNET.Converter;\n\npublic class PageSizeConverter : JsonConverter<PageSize>\n{\n    public override PageSize Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)\n    {\n        if (reader.TokenType == JsonTokenType.String)\n        {\n            return reader.GetString();\n        }\n        else if (reader.TokenType == JsonTokenType.StartObject)\n        {\n            return JsonSerializer.Deserialize<PageSize>(ref reader, ElectronJson.Options);\n        }\n        else\n        {\n            throw new JsonException(\"Invalid value for PageSize. Expected string or an object.\");\n        }\n    }\n\n    public override void Write(Utf8JsonWriter writer, PageSize value, JsonSerializerOptions options)\n    {\n        if (value is null)\n        {\n            return;\n        }\n\n        var str = (string)value;\n\n        if (str is not null)\n        {\n            writer.WriteStringValue(str);\n        }\n        else\n        {","sourceCodeStart":5,"sourceCodeEnd":41,"githubUrl":"https://github.com/ElectronNET/Electron.NET/blob/87cc6f98b6a9c5968d7846c0e775ea713bd0d7b2/src/ElectronNET.API/Converter/PageSizeConverter.cs#L5-L41","documentation":"PageSizeConverter.Read deserializes a PageSize that Electron may send either as a string (preset name like 'A4') or as an object (explicit width/height). Any other JSON token — number, true/false, etc. — has no mapping, so the converter throws JsonException \"Invalid value for PageSize. Expected string or an object.\".","triggerScenarios":"Deserializing a PageSize property from JSON where the value is a number (e.g. \"pageSize\": 9), boolean, or other non-string/non-object token, via JsonSerializer.Deserialize<PageSize> under ElectronJson.Options.","commonSituations":"JS caller passed a numeric page-size code instead of a preset name or {width,height} object; API version change where Electron began sending numbers; hand-written test payloads with the wrong type; copy/paste from docs targeting a different API.","solutions":["Send PageSize as a preset string: \"pageSize\": \"A4\".","Or send an explicit object: \"pageSize\": { \"width\": 100, \"height\": 100 }.","Convert numeric page-size codes to the preset name on the JS side before sending.","If numbers are a legitimate new input, update PageSizeConverter.Read to handle JsonTokenType.Number."],"exampleFix":"// before\n{ \"pageSize\": 9 }\n// after\n{ \"pageSize\": \"A4\" }","handlingStrategy":"type-guard","validationCode":"function isValidPageSize(v: unknown): boolean {\n  return typeof v === 'string' || (typeof v === 'object' && v !== null && 'width' in v && 'height' in v);\n}\nif (!isValidPageSize(options.pageSize)) throw new TypeError('pageSize must be a preset string or {width,height}');","typeGuard":"function isPageSize(v: unknown): v is string | { width: number; height: number } {\n  return typeof v === 'string' ||\n    (typeof v === 'object' && v !== null && typeof (v as any).width === 'number' && typeof (v as any).height === 'number');\n}","tryCatchPattern":"try\n{\n    var pageSize = JsonSerializer.Deserialize<PageSize>(element.GetRawText(), ElectronJson.Options);\n}\ncatch (JsonException ex) when (ex.Message.Contains(\"Invalid value for PageSize\"))\n{\n    Logger.Error(\"pageSize must be a preset string (e.g. \\\"A4\\\") or an object with width/height.\");\n}","preventionTips":["Validate pageSize on the JS side before invoking the API.","Use string literal union types ('A4' | 'A5' | ...) instead of numeric codes.","Keep renderer TypeScript definitions in sync with the .NET converter.","Cover PageSize deserialization with unit tests for string, object, and invalid tokens."],"tags":["json","deserialization","converter","pagesize"],"backgroundTag":"incompatible-source-type","analyzedSha":"87cc6f98b6a9c5968d7846c0e775ea713bd0d7b2","analyzedAt":"2026-09-14T03:09:47.608Z","contentChangedAt":"2026-09-14T03:09:47.608Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}