如何将对象列表从JavaScript传递到Windows运行时组件C#?

时间:2017-03-03 09:13:52

标签: javascript c# windows-runtime uwp winjs

我在C#中创建了一个WinRT组件,它接受一个I​​Enumarable作为参数

C#

public sealed class MyClass 
{
    public IEnumarable<DtoClass>  MyFunction(IEnumarable<DtoClass> properties) {

    return properties;
}
}

Java脚本

var Test=[];
for (var i = 0; i < res1.length; i++) 
{
    Test.push({ category_id: res1[i].category_id });
}
var Conncetion = WindowsRTSqlite.MyClass();
var result = Conncetion.MyFunction(Test);

我返回了我发送给MyFunction方法的相同输入参数,但它没有返回任何结果。我不知道为什么这不起作用。任何想法?

提前致谢。

1 个答案:

答案 0 :(得分:0)

  

如何将对象列表从JavaScript传递到Windows运行时组件C#?

实际上,正确的方法是将集合序列化为json字符串并将此字符串传递给Windows运行时组件。并在运行时组件端反序列化json字符串以进行数据处理。之后,将序列化的json字符串返回给JavaScript uwp app。有关如何在JavaScript中序列化,请参考this class,有关如何在C#中序列化,您可以参考this namespcase。所以你在JavaScript方面的代码可能如下:

 var Test = [];
 for (var i = 1; i < 6; i++) {
     Test.push({ category_id: i });
 } 
 var Conncetion = RuntimeComponent1.MyClass();
 var Testserialation = JSON.stringify(Test);
 var resultnew = Conncetion.newFunction(Testserialation);
 var Testreturn = JSON.parse(resultnew);

在Windows运行时组件中:

public sealed class MyClass
{
   public string NewFunction(string jsonstring)
   {
       JsonArray entity= JsonArray.Parse(jsonstring); 
       return entity.ToString();           
   }
}
  

我不确定为什么这不起作用。

根据您的代码段,您创建了一个对象数组,并尝试将其作为IEnumarable<DtoClass>传递给运行时组件。你传递了一个数组,在我看来你应该可以作为一个数组接收它。而且我不认为对象可以自动解析为DtoClass。如果使用可识别的字符串或int数组。例如,一个int数组:

 var newTest = [1, 2, 3, 4];
 var result2 = Conncetion.changeArray(newTest);

组件中的代码:

public int[] ChangeArray([ReadOnlyArray()] int[] input)
{
    int[] output =(int[])input.Clone();
    // Manipulate the copy.
    //   ...
    return output;
}

有关将数组传递给Windows运行时组件的更多详细信息,请参阅this article