Silverlight传递JSON对象不正确?

时间:2010-02-19 11:23:43

标签: javascript silverlight json serialization silverlight-3.0

我有一个标有ScriptableType&的Silverlight类。 ScriptableMember和我希望能够将对象从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);

在javascript中,我正在执行以下操作:

 alert(topic);
 alert(jsonObject);
 alert(JSON.stringify(jsonObject));

当我使用调试器时,我只看到类型为jsonObject的{​​{1}},但调用Object返回正确的类型,如果我访问属性alert(jsonObject),我会得到返回正确的值,但它没有使用jsonObject.eventContent正确序列化。

任何人都说出我做错了什么?

我不想在发送到javascript之前在Silverlight中序列化对象。

干杯

AWC

2 个答案:

答案 0 :(得分:2)

JSON.stringify使用for...in枚举对象的可枚举属性。如果属性不可枚举,则它们不会包含在结果字符串中。

Silverlight对象是外部对象,而不是本机javascript对象。就像ActiveXObject一样,属性不可发现/可枚举。我不确定是否有办法解决这个问题。我发现有几页提示实现IEnumerable以便能够使用本地语言中的foreach进行迭代,但我不确定这是否会延续到JavaScript。

我不会依赖它是可能的,但你永远不会知道。如果您需要一个可枚举的对象,唯一的方法可能是使用System.Json对其进行序列化,并在文档上调用eval以在JavaScript中对其进行反序列化。

答案 1 :(得分:2)

我设法解决了这个问题!

而不是声明像这样的对象从Silverlight传递到javascript:

[ScriptableType()] 
public class MyEvent 
{ 
    [ScriptableMember(ScriptAlias = "eventContent")] 
    public int EventContent { get; set; } 
} 

我使用System.Json namepsace并创建一个JsonObject,如下所示:

  var ob = new JsonObject
  {
       {"eventContent", 1}
  };

查看System.Json.JsonObject的文档以获取更多信息。

干杯

AWC