将带有哈希字符#的JSON字符串传递给Xamarin表单并截断数据



我有一个非常标准的Xamarin表单,它使用模板页面来提供一些概览数据。当用户点击一个条目时,我将他们带到详细信息页面。数据通过API来自服务器。详细信息保存在概览表单/模板后面的一个类中。当用户点击表单I json转换。SerializeOvbject并将其传递给详细信息页进行处理。这个过程在正常情况下工作良好。然而,当数据中有一个哈希标签#(又名磅,又名尖)时,json在它出现在字符串中的位置被截断。模板中选中事件的主体:

var forminfo = JsonConvert.SerializeObject(ea.Parameter);
Routing.RegisterRoute(nameof(TrackWarrantPageX), typeof(TrackWarrantPageX));
await Shell.Current.GoToAsync($"{nameof(TrackWarrantPageX)}?{nameof(TrackWarrantPageX.Contentx)}={forminfo}");

然而,在详细信息页中,接收到的字符串在#符号处被截断。以下是字符串到达详细信息页面的方式(只显示相关代码)。

[XamlCompilation(XamlCompilationOptions.Compile)]
[QueryProperty(nameof(Contentx), nameof(Contentx))]
public partial class TrackWarrantPageX : ContentPage
{
string contentx = "";
public string Contentx
{
get => contentx;
set
{
contentx = Uri.UnescapeDataString(value ?? string.Empty);
OnPropertyChanged();
PopulateForm(contentx); *<<<===== this is the first place I can inspect the contents and it is truncated*
}
}

我对

这行做了改动

contentx = Uri。UnescapeDataString(价值? ?string.Empty);

并做了一些研究,但发现不足。因此,任何帮助都将是非常感激的。

根据@Jason的建议,我研究了URLencoding,偶然发现了Uri.EscapDataString (encode)。由于该页执行了Uri.UnescapeDataString (decode),因此最好先对其进行编码。所以我在模板的tap事件上添加了一行代码,它看起来像这样:

var forminfo = JsonConvert.SerializeObject(ea.Parameter);
string _forminfo = Uri.EscapeDataString(forminfo); <<<===NEW LINE OF CODE
await Shell.Current.GoToAsync($"{nameof(TrackWarrantPageX)}?{nameof(TrackWarrantPageX.Contentx)}={_forminfo }");

现在字符串被保存在页端。谢谢你杰森。

最新更新