You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 22:00:02