【问题标题】:How to pass list of object from JavaScript to Windows Runtime Component C#?如何将对象列表从 JavaScript 传递到 Windows 运行时组件 C#?
【发布时间】:2017-07-23 07:45:59
【问题描述】:

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

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 方法的输入参数相同,但它没有返回任何结果。我不确定为什么这不起作用。有什么想法吗?

提前致谢。

【问题讨论】:

    标签: javascript c# windows-runtime uwp winjs


    【解决方案1】:

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

    其实正确的做法是把集合序列化成一个json字符串,然后把这个字符串传递给Windows Runtime Component。并在运行时组件端反序列化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();           
       }
    }
    

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

    根据您的代码 sn-p,您创建了一个对象数组并尝试将其作为 IEnumarable&lt;DtoClass&gt; 传递给运行时组件。你传递了一个数组,在我看来你应该能够将它作为一个数组接收。而且我认为对象不能自动解析为DtoClass。如果使用可以识别的字符串或整数数组。例如,一个 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-03
      • 1970-01-01
      相关资源
      最近更新 更多