2016-06-24 8 views
2

Я использую собственный протокол для открытия другого приложения из приложения Windows. Я использую следующий фрагмент кода:Пропустить JSON string из одного приложения в другое приложение (Windows 8.1 Apps) C#

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

+0

Не могли бы вы указать, что такое значение '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''? –

+0

Также вы передаете метод * whole * JSON методу? Или вы сначала получаете нужную вам стоимость, а затем * передаете ее? Если это первое, это связано с тем, как работает JSON - сначала вам нужно получить значение по ключу.См. Здесь для синтаксиса JSON: http://www.w3schools.com/json/json_syntax.asp. Если вы можете указать значение вашей строки JSON, это также поможет :) –

+0

Итак, вы * * передаете целая строка 'json'? –

ответ

2

Ваша проблема заключается в том, что вы отправляете целикомjson Строка для создания как Ури.

Вам нужно будет получить необходимые значения из строки первый и затем передавать их в ваш метод.

В качестве примера, предположим, что ваш

JObject jObj = new JObject(); 
jObj.Add("Name", "abcdef"); 
jObj.Add("Address", "acvdfs"); 
string json = jObj.ToString(); 

код даст вам «{Name}/{Address}» выход - appb://abcdef/acvdfs

Вместо синтаксического анализа, которые непосредственно к string, вам нужно будет получить значения из первый.

В противном случае ваш

{ "Имя": "ABCDEF", "Адрес": "acvdfs"}

является то, что вызывает

Invalid 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 и т.д.

Любые вопросы, просто спросите :)

Надеется, что это помогает!

+0

Я пробовал точно так же. Он дает путь 'abcdef \ acvdfs'in. Но он снова повторяет ту же ошибку :( –

+1

Чтобы уточнить, предполагается, что вы используете образец в той же части, которую вы объявили 'jObj'. Если вы вернете« правильную »строку Json из другого места, вы можете захотеть проанализировать его немного по-другому. Класс JsonConvert для C# - это спасательный инструмент: http://www.newtonsoft.com/json/help/html/t_newtonsoft_json_jsonconvert.htm –

+1

А, мне плохо, это дает вам вместо символа «\» для вашего Uri. Удалите «Path.Combine» и выполните «var path = string.Join» («/», values); вместо этого: –

 Смежные вопросы

  • Нет связанных вопросов^_^