Javascript Silverlight错误地传递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&ScriptableMember标记的Silverlight类,我希望能够将对象从Silverlight传递到javascript。当我调用JSON.stringify(在javascript中)时,我希望收到对象的JSON表示,但我得到的只是
{}

该类定义为:

[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中似乎不可用。