最近在学习如何将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比较容易。