2017-03-03 45 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細節。