MAUI安卓真机调试报错:无法识别Microsoft.Maui.Graphics.Color
解决MAUI三星安卓设备上Color类型的NotSupportedException错误
问题根源
从代码中的[PrimaryKey]等特性判断,你应该使用SQLite存储Aditiv对象。SQLite不支持直接序列化Microsoft.Maui.Graphics.Color这类复杂对象,模拟器环境的SQLite实现可能兼容宽松,但三星真机的SQLite执行逻辑更严格,因此抛出异常。
解决步骤
替换Color属性为可序列化的基础类型
不要直接存储Color对象,改用存储颜色的十六进制字符串(或RGB数值),字符串是SQLite原生支持的类型,能避开序列化问题。修改Aditiv类代码
添加一个用于持久化的字符串属性存储颜色值,再创建一个标记为[Ignore]的Color属性供UI使用,示例如下:
using SQLite; using Microsoft.Maui.Graphics; public class Aditiv { [PrimaryKey, AutoIncrement] public int ID { get; set; } public string Cod { get; set; } public string Name { get; set; } public string Description { get; set; } public int CategoryId { get; set; } // 用于SQLite存储的十六进制颜色字符串 public string CuloareHex { get; set; } // 供UI使用的Color属性,不存入数据库 [Ignore] public Color Culoare { get { // 如果已有存储的颜色值,直接转换返回 if (!string.IsNullOrEmpty(CuloareHex)) return Color.FromHex(CuloareHex); // 根据CategoryId生成对应颜色并存储 Color targetColor; switch (CategoryId) { case 1: targetColor = Color.FromRgb(0, 180, 0); break; case 2: targetColor = Color.FromRgb(255, 200, 0); break; case 3: targetColor = Color.FromRgb(200, 0, 0); break; default: targetColor = Color.FromRgb(0, 0, 0); break; } CuloareHex = targetColor.ToHex(); return targetColor; } set { CuloareHex = value.ToHex(); } } }
- 避免混用平台特定Color类型
不要在跨平台代码中使用Android.Graphics.Color这类平台专属类型,MAUI统一使用Microsoft.Maui.Graphics.Color即可,保证跨平台兼容性。
验证效果
修改代码后重新编译部署到三星设备,此时SQLite只会存储字符串类型的颜色值,不会再抛出序列化异常,同时UI层依然可以正常使用Color属性。
内容的提问来源于stack exchange,提问作者andreig
相关产品推荐
相关产品推荐

