編集:私は答えを見つけました(Tejsの助けを借りて); 下記参照。
C# ベースのヘルパー ライブラリと共に、HTML/Javascript を使用して Metro アプリを開発しています。一般的に言えば、Javascript から C# メソッドを呼び出すことに成功していますが、配列 (私の場合は文字列の配列) を渡すことができないようです。個々の文字列を渡すことは問題なく機能します。
私のコードは次のようなものです:
// in javascript project
var string1 = ...;
var string2 = ...;
var string3 = ...;
var result = MyLibrary.MyNamespace.MyClass.foo([string1, string2, string3]);
次に、C# で次のようにします。
// in C# project
public sealed class MyClass {
public static string Foo(string[] strings) {
// do stuff...
}
}
問題は、メソッド「Foo」が正しい長さ (上の例では 3) の配列を取得するが、すべての要素が空であることです。私もこれを試しました:
public static string Foo(object[] strings) {
...
それもうまくいきませんでした - 繰り返しますが、配列は正しいサイズでしたが、すべての要素が null でした。
javascript で「new Array(...)」を使用して文字列リテラル、文字列変数を渡そうとしましたが、「Foo」の署名を「params string[]」と「params object[]」に変更しましたが、すべて役に立ちませんでした.
個々の文字列を渡すことは問題なく機能するので、おそらくハッカーでこれを回避できます...しかし、実際にはこれでうまくいくようです。配列が適切なサイズで渡されるのは本当に奇妙に思えます (つまり、マーシャリングを行っているものは何でも、javascript 配列構造について何かを知っています) にもかかわらず、内容が入力されていません。