无论如何将SilverLight中的对象传递给JavaScript而不进行序列化?

时间:2012-08-24 13:53:33

标签: c# javascript silverlight

假设我在SilverLight中有一个类:

public class GenericClass {

    public string filedOne = "field one";

    public string filedTwo = "field two";

}

我想通过以下方式将其实例传递给JavaScript:

function callback(obj) {
    console.log(obj.fieldOne);
}

如果没有序列化到JSON并返回,这可能吗?

更新

我知道如何传递原始值 - 这不是问题。我需要传递一个包含多个字段的对象。

2 个答案:

答案 0 :(得分:3)

public partial class TestPage: UserControl
{
    public TestPage()
    {
        InitializeComponent(); 
        MyClass myObject = new MyClass();
        myObject.SomeMember = "TEST";
        HtmlPage.Window.Invoke("JSFunction", myObject);
    }        
}

更新: 为了将非原始类型对象传递给javascript;类定义应标有ScriptableType属性。此类的所有属性也应标有ScriptableMember属性。

[ScriptableType]
public class MyClass
{
    [ScriptableMember]
    public string SomeMember { get; set; }    
}

答案 1 :(得分:3)

使用ScriptableTypeAttribute

[ScriptableType]                       
public class SMT_ScriptableManagedType
    {
    [ScriptableMember(EnableCreateableTypes = false)] // No access
     public string GetString1()
        { return "abcdefg"; }

     public string GetString2()            // Can be accessed.
        { return "123456"; }
}

现在你可以pass the object这样:

HtmlPage.Window.Invoke("ReceiveSMT", new SMT_ScriptableManagedType());

其中ReceiveSMT是一个javascript函数,它将接收对象作为参数。