2016-06-24 8 views
2

Windowsのランタイムアプリケーションから別のアプリケーションを開くためにカスタムプロトコルを使用しています。プレーンな文字列がある場合にはそれが正常に動作しますJSON文字列を1つのアプリケーションから別のアプリケーションに渡す(Windows 8.1 Apps)C#

await Launcher.LaunchUriAsync(new Uri("appb://hello"));

:私は、次のコードスニペットを使用しています。しかし、JSON文字列を渡している間に解析エラーが発生します。 Invalid URI: The hostname could not be parsed.

私はJSONを作成していますによって:

{ "名": "ABCDEF"、 "住所": "acvdfs"}

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

それはとしてJSONを与えます

+0

JSONの 'string'値を使用してください。 –

+0

また、* whole * JSON文字列をメソッドに渡していますか?それとも、あなたが最初に必要としていた価値を得ているのですか?最初の場合は、JSONの仕組みのためです。まずキーで値を取得する必要があります。JSONの構文についてはこちらをご覧ください:http://www.w3schools.com/json/json_syntax.asp - JSONの 'string'の値を提供できるなら、これも役に立ちます:) –

+0

あなたは*全体の 'json'文字列? –

答えて

2

json文字列をすべて送信していることが原因で問題が発生しています。ウリとして編集。

あなたは、文字列のうち必要な値最初を取得する必要がありますし、その後は、あなたの方法にそれらを渡します。直接stringに、あなたが値を取得する必要がありますappb://abcdef/acvdfs

代わりの解析 - 例として

、のは、あなたの

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

コードがあなたに「{Name}/{Address}」出力を与えるだろうと言ってみましょう最初。

そうでなければ、あなたの

{ "名": "ABCDEF"、 "住所": "acvdfs"}

無効なURIを引き起こしているものです。 hostnameを解析できませんでした。

エラーです。あなたは、その文字列から値を取得するためにこれを行うことができます

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'をパスに与えます。しかし、同じエラーが再びスローされます:( –

+1

これは、あなたが 'jObj'を宣言した同じ部分のサンプルを使用していると仮定しています。別の場所から"適切な "Json文字列を取得している場合、 C#のJsonConvertクラスは、救命ツールです。http://www.newtonsoft.com/json/help/html/t_newtonsoft_json_jsonconvert.htm –

+1

ああ、私の悪いことはあなたに与えているあなたのUriの "/"の代わりに "¥"の代わりに "Path.Combine"を削除し、 'var path = string.Join("/"、values);'代わりに –

関連する問題