EDIT: He encontrado una respuesta (con la ayuda de Tejs); vea abajo.Pase la matriz de javascript a C# en la aplicación Metro
Estoy desarrollando una aplicación de Metro utilizando HTML/Javascript, junto con algunas bibliotecas de ayuda basadas en C#. En términos generales, estoy teniendo mucho éxito al invocar los métodos de C# de Javascript, pero parece que no puedo hacer que las matrices que pasan (en mi caso específico, las matrices de cadenas) funcionen. Pasar cadenas individuales funciona sin problemas.
Mi código es algo como esto:
// in javascript project
var string1 = ...;
var string2 = ...;
var string3 = ...;
var result = MyLibrary.MyNamespace.MyClass.foo([string1, string2, string3]);
Luego, en C#:
// in C# project
public sealed class MyClass {
public static string Foo(string[] strings) {
// do stuff...
}
}
El problema es que el método de "Foo" recibe una matriz con la longitud correcta (lo que en el ejemplo anterior, 3), pero todos los elementos están vacíos. También probé esto:
public static string Foo(object[] strings) {
...
que no funcionaron bien - de nuevo, la matriz era del tamaño correcto, pero todos los elementos eran nulos.
He intentado pasar literales de cadena, variables de cadena, usando "new Array (...)" en javascript, cambiando la firma de "Foo" a "params string []" y "params object []", todo fue en vano.
Como pasar cadenas individuales funciona bien, probablemente pueda solucionar esto con algunos hackers ... pero parece que esto debería funcionar. Me parece realmente extraño que la matriz se transfiera como el tamaño correcto (es decir, lo que sea que esté haciendo la clasificación sepa ALGO sobre la estructura de la matriz de JavaScript) y, sin embargo, los contenidos no se llenan.
¿Qué sucede cuando se usan literales de cadena en lugar de 'cadena1',' cadena2' y 'cadena3'? – Tejs
Mismo resultado: el código C# solo recibe cadenas vacías. – atkretsch
¿Qué pasa con 'new String (" Hello World ")' para un elemento de matriz? Tal vez el WinRT no puede asumir que el objeto es una cadena – Tejs