将JSON字符串从一个应用程序传递到另一个应用程序(Windows 8.1应用程序)C#

时间:2016-06-24 10:51:32

标签: c# windows windows-runtime windows-8.1

我使用自定义协议从Windows运行时应用中打开另一个应用。我正在使用以下代码段:

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" }

1 个答案:

答案 0 :(得分:2)

您的问题是因为您要将整个 json字符串发送为Uri。

您需要首先从字符串中获取所需的值,然后然后将这些值传递给您的方法。

举个例子,让我们说你的

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等。

有任何问题,请问:)

希望这有帮助!