通过C#将JSON中的Font Awesome Unicode绑定到XAML不生效如何解决
解决方案
你遇到的核心问题是拿到的十六进制图标编码是字符串格式,需要转为实际的Unicode字符才能被Font Awesome字体识别渲染,以下是两种可行方案:
方案1:C#端处理(无需修改PHP接口,推荐)
你之前尝试9报错的原因是未清理编码字符串中的非法字符,也没有做容错处理,修改后代码如下:
第一步:修改Event类
直接在类中添加转换逻辑,无需额外遍历处理:
public class Event { [JsonProperty("title")] public string Title { get; set; } [JsonProperty("icon")] public string Icon { get; set; } public string FormattedIcon { get { if (string.IsNullOrWhiteSpace(Icon)) return string.Empty; // 清理所有非十六进制字符,兼容各种可能的返回格式 string cleanHex = Icon.Trim().Replace("0x", "").Replace("&", "") .Replace(";", "").Replace("#", "").Replace("x", ""); // 容错解析,避免格式错误崩溃 if (int.TryParse(cleanHex, System.Globalization.NumberStyles.HexNumber, null, out int charCode)) { return char.ConvertFromUtf32(charCode); } return string.Empty; } } }
第二步:修改XAML绑定
直接绑定转换后的属性即可:
<Label Text="{Binding FormattedIcon}" FontFamily="{StaticResource FA-Solid}" />
方案2:PHP端处理(C#无需额外转换)
直接在PHP接口生成Unicode字符,C#反序列化后可直接使用:
第一步:修改PHP接口代码
# api.php $data = fetch_database_table_into_associative_array(); // 遍历把十六进制编码转为实际Unicode字符 foreach ($data as &$item) { $item['icon'] = mb_chr(hexdec($item['icon']), 'UTF-8'); } die(json_encode(['events' => $data]));
第二步:直接绑定Icon属性
C#端不需要做任何额外处理,直接绑定原始Icon字段即可:
<Label Text="{Binding Icon}" FontFamily="{StaticResource FA-Solid}" />
常见错误原因说明
- 直接拼接
\u或&#x;生成的是普通字符串,不是实际的Unicode字符,XAML只会当成文本渲染 - PHP中直接写
\uf51c是字符串字面量,不是实际字符,json_encode会自动转义反斜杠,导致C#拿到的是\\uf51c文本 - 十六进制转int时需要指定进制格式,直接用Convert.ToInt32会默认按十进制解析,必然报错
内容的提问来源于stack exchange,提问作者s3c
相关产品推荐
相关产品推荐

