EDIT: Ich habe eine Antwort gefunden (mit Hilfe von Tejs); siehe unten.Übergeben Array von Javascript zu C# in Metro-App
Ich entwickle ein Metro-App HTML/Javascript verwenden, zusammen mit einigen C Hilfsbibliotheken # -basierte. Im Allgemeinen habe ich eine Menge Erfolg beim Aufrufen von C# -Methoden aus Javascript, aber ich kann nicht scheinen, Arrays (in meinem speziellen Fall Arrays von Strings) zu passieren. Das Übergeben einzelner Strings funktioniert ohne Probleme.
Mein Code ist so etwas wie dieses:
// in javascript project
var string1 = ...;
var string2 = ...;
var string3 = ...;
var result = MyLibrary.MyNamespace.MyClass.foo([string1, string2, string3]);
Dann in C#:
// in C# project
public sealed class MyClass {
public static string Foo(string[] strings) {
// do stuff...
}
}
Das Problem ist, dass die Methode "Foo" ein Array mit der richtigen Länge wird (so in der oben Beispiel 3, aber alle Elemente sind leer. Ich habe es auch versucht:
Das hat auch nicht funktioniert - wieder, das Array hatte die richtige Größe, aber alle Elemente waren null.
Ich habe versucht String-Literale, String-Variablen übergeben, mit "neues Array (...)" in Javascript, Ändern der Signatur von "Foo" in "Params String []" und "Params-Objekt []", alles vergebens.
Da die Passage einzelner Strings gut funktioniert, kann ich das wohl mit etwas Hacker umgehen ... aber es scheint wirklich, als würde das funktionieren. Es scheint mir wirklich komisch, dass das Array in der richtigen Größe übergeben wird (d. H. Was auch immer das Marshalling tut, weiß ETWAS über die Javascript-Array-Struktur) und dennoch werden die Inhalte nicht gefüllt.
Was passiert, wenn Sie String-Literale anstelle von 'string1',' string2' und 'string3' verwenden? – Tejs
Gleiches Ergebnis - der C# -Code erhält immer noch nur leere Zeichenfolgen. – atkretsch
Was ist mit 'new String (" Hallo Welt ")' für ein Array-Element? Vielleicht kann die WinRT nicht davon ausgehen, dass das Objekt eine Zeichenkette ist – Tejs