2017-03-03 42 views
0

我已创建在C#中的WinRT部件,它接受一个I​​Enumarable作为参数如何将JavaScript对象列表传递给Windows运行时组件C#?

C#

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

    return properties; 
} 
} 

爪哇脚本

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方法,但它不会返回任何结果。我不知道为什么这不起作用。有任何想法吗?

在此先感谢。

回答

0

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

实际上,正确的方法是将集合序列化为json字符串并将此字符串传递给Windows运行时组件。并反序列化运行时组件端的json字符串以进行数据处理。之后,将序列化的json字符串返回到JavaScript uwp应用程序。关于如何在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细节。