2

SilverLight にクラスがあるとします。

public class GenericClass {

    public string filedOne = "field one";

    public string filedTwo = "field two";

}

そして、そのインスタンスを JavaScript に渡して、次の方法でアクセスしたいと考えています。

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

これは、JSON にシリアル化して戻すことなく可能ですか?

アップデート:

プリミティブ値を渡す方法を知っています - それは問題ではありません。複数のフィールドを持つオブジェクトを渡す必要があります。

4

2 に答える 2

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; }    
}
于 2012-08-24T14:01:49.007 に答える
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"; }
}

これで、次のようにオブジェクトを渡すことができます:

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

ReceiveSMT は、オブジェクトをパラメーターとして受け取る JavaScript 関数です。

于 2012-08-24T14:11:47.563 に答える