是否可以在不序列化的情况下将对象从SilverLight传递到JavaScript

Is there anyway to pass an object from SilverLight to JavaScript without serializing?

本文关键字:SilverLight 对象 JavaScript 情况下 序列化 是否      更新时间:2023-09-26

假设我在SilverLight中有一个类:

public class GenericClass {
    public string filedOne = "field one";
    public string filedTwo = "field two";
}

我想把它的一个实例传递给JavaScript,以以下方式访问:

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

如果不序列化为JSON并返回,这可能吗?

更新:

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

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

更新:为了将非基元类型的对象传递给javascript;类定义应标记有CCD_ 1属性。该类的所有属性也应标记为ScriptableMember属性。

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

使用ScriptableTypeAttribute

[ScriptableType]                       
public class SMT_ScriptableManagedType
    {
    [ScriptableMember(EnableCreateableTypes = false)] // No access
     public string GetString1()
        { return "abcdefg"; }
     public string GetString2()            // Can be accessed.
        { return "123456"; }
}

现在你可以像这样传递对象:

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

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