Sandy8606

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

      最近在学习如何将Silverlight与.NET MVC整合,其中遇到了一个很棘手的问题,就是如何将silverlight这边的对象作为参数传递给Silverlight.Web工程中的controller的action。

由于controller不清楚silverlight工程中的类结构,所以无法直接引用这个对象。开始想法是将这个对象序列化成二进制作的流利用httpwebrequest发送给controller的action,后来证明这个方法行不通(如果哪位高手可以搞定,请赐教),在web端无法解析出这个对象,提示找不到assembly。

     后来发现silverlight是支持Json的,所以就想利用Json来序列化对象,但问题又出来了,web不支持System.Json,这次无语了。。。(可能还是小弟研究的不够透彻)

     还好,在记不得是Google还是Baidu了半天后,发现了一个叫做Json.NET的东西,后来感觉很好很强大。下载地址:http://json.codeplex.com/Release/ProjectReleases.aspx

     下载后将压缩包中的NewtonSoft.Json.dll添加到各自的项目中,很容易就可以将对象传递给web端。以下是实例代码:

      序列化Person对象

 [JsonObject(MemberSerialization.OptIn)]
        class Person
        {
            [JsonProperty]
           public string name
            {
                get;
                set;
            }
            [JsonProperty]
           public string title
            {
                get;
                set;
            }
        }

 static void Main()
        {
             Person P=new Person();
             P.name = "zhangsan";
             P.title = "cus";
             string s = JsonConvert.SerializeObject(P,Formatting.Indented);
           
        }

 反序列化对象

public ActionResult GetTask(string s)
{
      JObject J = JObject.Parse(s);
      string name = (string)J["name"];
      string title=(string)j["title"];
      return View();
}

这样很轻松的就完成了Silverlight与MVC整合中的数据传递。个人感觉也可以采用XMLSerializer来序列化对象,但是在服务器端解析起来可能比较麻烦。个人感觉还是利用Json比较容易。

posted on 2010-08-03 15:38  Sandy8606  阅读(615)  评论(1编辑  收藏  举报