将 JSON 字符串从一个应用程序传递到另一个应用程序(Windows 8.1 应用程序)C#
Posted
技术标签:
【中文标题】将 JSON 字符串从一个应用程序传递到另一个应用程序(Windows 8.1 应用程序)C#【英文标题】:Pass JSON string form one app to another app (Windows 8.1 Apps) C# 【发布时间】:2016-10-26 23:16:48 【问题描述】:我正在使用自定义协议从 Windows 运行时应用程序打开另一个应用程序。我正在使用以下代码 sn-p:
await Launcher.LaunchUriAsync(new Uri("appb://hello"));
当有纯字符串时它工作正常。但它在传递 JSON 字符串时会出现解析错误。
Invalid URI: The hostname could not be parsed.
我正在通过以下方式创建 JSON:
JObject jObj = new JObject();
jObj.Add("Name", "abcdef");
jObj.Add("Address", "acvdfs");
string json = jObj.ToString();
它给 JSON 格式:
“名称”:“abcdef”,“地址”:“acvdfs”
【问题讨论】:
在使用 JSONstring
值时,能否请您提供一下?
另外,您是否将 whole JSON 字符串传递给方法?还是您首先获得所需的值,然后然后通过它?如果是第一个,那是因为 JSON 的工作方式——首先,您需要通过键获取值。有关 JSON 语法,请参见此处:w3schools.com/json/json_syntax.asp - 如果您可以提供 JSON string
的值,这也会有所帮助:)
那么,您正在传递整个json
字符串吗?
是的。喜欢:await Launcher.LaunchUriAsync(new Uri("appb://" + json));
嗨 Kishor,我尝试转换为 base64,但它仅适用于短 json 字符串,可能是因为尝试编码大字符串时末尾有 '==' 字符。
【参考方案1】:
您的问题是因为您要发送 整个 json
字符串以创建为 Uri。
您需要从字符串first中获取所需的值,然后然后将这些值传递给您的方法。
举个例子,假设你的
JObject jObj = new JObject();
jObj.Add("Name", "abcdef");
jObj.Add("Address", "acvdfs");
string json = jObj.ToString();
代码会给你一个“Name/Address
”输出 - appb://abcdef/acvdfs
您需要先获取值,而不是将其直接解析为 string
。
否则你的
“名称”:“abcdef”,“地址”:“acvdfs”
是什么原因造成的
无效的 URI:无法解析主机名。
错误。
您可以这样做以从该字符串中检索值:
var values = jObj.Properties().Select(x => x.Value.ToString()).ToArray(); // Gives you an array of the values.
var path = string.Join("/", values); // Creates an "a/b" path by joining the array.
await Launcher.LaunchUriAsync(new Uri("appb://" + path)); // Give that path to create the Uri and pass to your method.
此代码假定您只是按照我的方式使用键来创建路径。它适用于任意数量的键,因为它只是将所有值与“/”连接在一起 - 例如a/b/c/d/e/f/g
等
任何问题,尽管问:)
希望这会有所帮助!
【讨论】:
我也试过了。它给出了abcdef\acvdfs
in 路径。但它再次抛出同样的错误:(
澄清一下,这是假设您在声明 jObj
的同一部分中使用示例。如果您要从其他地方检索“正确”的 Json 字符串,您可能需要考虑以不同的方式解析它。 C# 的 JsonConvert 类是救生工具:newtonsoft.com/json/help/html/t_newtonsoft_json_jsonconvert.htm
啊,我的错误是给你一个“\”字符而不是你的 Uri 的一个“/”。删除 Path.Combine
并改为使用 var path = string.Join("/", values);
:)以上是关于将 JSON 字符串从一个应用程序传递到另一个应用程序(Windows 8.1 应用程序)C#的主要内容,如果未能解决你的问题,请参考以下文章