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

浙公网安备 33010602011771号