2017-03-03 5 views
0

私は私は同じ入力パラメータを返すよJavaScriptのオブジェクトリストをWindowsランタイムコンポーネントC#に渡すには?

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); 

パラメータとしてIEnumarableを受け入れるC#でWinRTのコンポーネントを作成しましたMyFunctionメソッドに送信しますが、結果は返されません。なぜこれが動作していないのか分かりません。何か案は?

ありがとうございます。

答えて

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); 

コードコンポーネントで:Windowsランタイムコンポーネントへの配列を渡す約

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

詳細this articleを参照してください。

関連する問題