c# - 通过 C# 将 Unicode 从 JSON 绑定到 XAML 不起作用。有办法吗?
问题描述
介绍
我想在移动应用程序中使用与在网站上相同的 Font Awesome 5 图标。
以下 XAML 片段完美地显示了该图标。
<!-- Events.xaml -->
<Label Text="" FontFamily="{StaticResource FA-Solid}" />
我希望将从 JSON 接收到的数据绑定Text
到此图标的值。
问题是我无法将 Font Awesome 代码转换为 C# 中的工作 Unicode,并且直接发送 Unicode 在 JSON 中的代码之前添加一个反斜杠。请注意,该字母č
已正确转换为 JSON 中的 Unicode 等价物。但是如何将实际图标发送到 JSON 以将其转换为正确的 Unicode?
创建 JSON [PHP]
# api.php
$data = fetch_database_table_into_associative_array(); // Function made up for explanation
/*
[
0 => [
'title' => 'Tečaj',
'icon' => 'f51c',
],
1 => [ ... ],
...
]
*/
die(json_encode(['events' => $data]));
/*
{
"events":[
{
"title":"Te\u010daj",
"icon":"f51c"
},
{
...
},
...
]
}
*/
接收和转换响应 [C#]
使用 异步获取数据HttpClient.GetAsync
,将其读取为字符串并反序列化为我的对象效果很好。
Event
是
public class Event
{
[JsonProperty("title")]
public string Title { get; set; }
[JsonProperty("icon")]
public string Icon { get; set; }
}
并且所有事件的收集都List<Event> Events
填充了数据。
尝试 1
<!-- Events.xaml -->
<Label Text="{Binding Icon}" FontFamily="{StaticResource FA-Solid}" />
这(显然)呈现 text f51c
。
尝试 2
<!-- Events.xaml -->
<Label Text="&#x{Binding Icon};" FontFamily="{StaticResource FA-Solid}" />
这无法绑定任何东西。
尝试 3
将属性 FormattedIcon 添加到模型事件并尝试
// Events.cs
foreach (var Event in Events)
{
Event.FormattedIcon = "&#x" + Event.Icon + ";";
}
<!-- Events.xaml -->
<Label Text="{Binding FormattedIcon}" FontFamily="{StaticResource FA-Solid}" />
这会呈现 Unicode(我认为没有结尾;
)而不是图标。
尝试 4
在阅读了 XAML 和SO上的代码隐藏&#x...;
格式后,我从循环内部更改了语句(尝试 3)\u...
foreach
// Events.cs
foreach (var Event in Events)
{
Event.FormattedIcon = "\u" + Event.Icon;
}
这会导致错误并且无法编译。
尝试 5
与上面相同,但试图逃避反斜杠。
// Events.cs
foreach (var Event in Events)
{
Event.FormattedIcon = "\\u" + Event.Icon;
}
再次呈现 Unicode(以不同于尝试 3 的格式)。
尝试 6 和 7
回到 PHP 中的 JSON 创建并替换'icon' => 'f51c'
为'icon' => '\uf51c'
as 'icon' => "\uf51c"
,并且在这两种情况下都json_encode
将图标字符串转换为\\uf51c
ie。在字符串之前添加了反斜杠。
所以最后我尝试删除代码隐藏中的第一个反斜杠
// Events.cs
foreach (var Event in Events)
{
Event.FormattedIcon = Event.Icon.Substring(1);
}
但它只是删除了转义的反斜杠并渲染uf51c
;
尝试 8
将 JSON 数据改回'icon' => 'f51c'
. 改为string FormattedIcon
在char FormattedIcon
模型中Event
。试图将字符串读取为 Unicode 字符。
// Events.cs
foreach (var Event in Events)
{
int characterCode = Convert.ToInt32(Event.Icon);
Event.FormattedIcon = (char)characterCode;
}
转换错误
尝试 9
根据SO改char FormattedIcon
回string FormattedIcon
模型中。Event
// Events.cs
foreach (var Event in Events)
{
int characterCode = int.Parse(Event.Icon, System.Globalization.NumberStyles.HexNumber);
Event.FormattedIcon = Char.ConvertFromUtf32(characterCode);
}
转换错误 ( System.FormatException: 'Input string was not in a correct format.'
)
帮助
对幸运数字 10 有什么建议吗?
解决方案
推荐阅读
- c# - 在 Crystal Report 中水平显示记录
- docker - 如何在运行期间在 Docker Image 中传递 YML 配置文件
- database - 我们可以在数据仓库中存储多种类型的数据吗?
- python - 数据框子集的交互式绘图
- angular - 从可观察链(rxjs)向外部对象插入数据
- flutter - 将资产文件夹中的 JSON 文件移动到 Flutter 项目的 url
- javascript - 使用 Typescript 的通用算法
- cpanel - cPanel 20GB+ 文件压缩和下载问题花费了太多时间
- scikit-learn - 无论使用哪个数据集,svm 都返回相同的精度
- reactjs - 如何在反应js中获取对象数据