Javascript Silverlight错误地传递JSON对象?
我有一个用ScriptableType&ScriptableMember标记的Silverlight类,我希望能够将对象从Silverlight传递到javascript。当我调用JSON.stringify(在javascript中)时,我希望收到对象的JSON表示,但我得到的只是Javascript Silverlight错误地传递JSON对象?,javascript,silverlight,json,serialization,silverlight-3.0,Javascript,Silverlight,Json,Serialization,Silverlight 3.0,我有一个用ScriptableType&ScriptableMember标记的Silverlight类,我希望能够将对象从Silverlight传递到javascript。当我调用JSON.stringify(在javascript中)时,我希望收到对象的JSON表示,但我得到的只是{} 该类定义为: [ScriptableType()] public class MyEvent { [ScriptableMember(ScriptAlias = "eventContent")]
{}
该类定义为:
[ScriptableType()]
public class MyEvent
{
[ScriptableMember(ScriptAlias = "eventContent")]
public int EventContent { get; set; }
}
我从Silverlight传递对象,如下所示:
var jsonObject = new MyEvent { EventContent = 1 };
HtmlPage.Window.Invoke("publishValue", topic, jsonObject);
var ob = new JsonObject
{
{"eventContent", 1}
};
在javascript中,我将执行以下操作:
alert(topic);
alert(jsonObject);
alert(JSON.stringify(jsonObject));
当我使用调试器时,我只看到jsonObject
类型为Object
,但是调用alert(jsonObject)
返回正确的类型,如果我访问属性jsonObject.eventContent
我会返回正确的值,但它不能用JSON.stringify
正确序列化
有人知道我做错了什么吗
在发送到javascript之前,我不想在Silverlight中序列化对象
干杯
AWC
JSON.stringify
使用for…in
枚举对象的可枚举属性。如果属性不可枚举,则它们不会包含在结果字符串中
Silverlight对象是外部对象,而不是本机javascript对象。与ActiveXObject一样,属性不可发现/枚举。我不确定是否有办法解决这个问题。我发现了几页关于实现IEnumerable的提示,可以在本机语言中使用foreach
进行迭代,但我不确定这是否会延续到JavaScript中
我不相信这是可能的,但你永远不知道。如果您需要一个对象是可枚举的,唯一的方法可能是使用
System.Json
对其进行序列化,并在文档上调用eval
以在JavaScript中对其进行非序列化。我已经设法解决了这个问题
不要声明这样的对象来从Silverlight传递到javascript:
[ScriptableType()]
public class MyEvent
{
[ScriptableMember(ScriptAlias = "eventContent")]
public int EventContent { get; set; }
}
我使用System.Json
namepsace并创建一个JsonObject
如下:
var jsonObject = new MyEvent { EventContent = 1 };
HtmlPage.Window.Invoke("publishValue", topic, jsonObject);
var ob = new JsonObject
{
{"eventContent", 1}
};
有关更多信息,请查看System.Json.JsonObject
的文档
干杯
AWC感谢大家的提醒,我是通过SL序列化和JS反序列化来解决这个问题的。Json在SIlverLight 4中似乎不可用。