是否可以通过asp.net服务器端代码将对象(可序列化类或其他方式)传递给Silverlight控件?
答案 0 :(得分:3)
好吧,它将涉及序列化。请记住 - 您的Silverlight客户端与服务器断开连接,就像浏览器与服务器断开连接一样。
关于与Silverlight之间的JSON序列化,有一篇很棒的文章here。以下是文章摘要:
让我们首先简要介绍一下JSON是什么。它代表 J ava S cript O bject N \ totation,并用作XML的替代方案。以下是JSON文件的一个简单示例:
对于单个对象 {"FirstName":"Martin","LastName":"Mihaylov"}
和
[{"FirstName":"Martin","LastName":"Mihaylov"},{"FirstName":"Emil","LastName":"Stoychev"}]
用于多个对象。
它看起来像一个数组。根据序列化的对象,它可能看起来非常复杂。
为了使用DataContractJsonSerializer进行序列化,我们必须设置[DataContract]属性。序列化将使用的特性必须具有[DataMember]属性。注意:要使用这些属性,请添加对System.Runtime.Serialization;
的引用[DataContract]
public class Person
{
[DataMember]
public string FirstName
{
get;
set;
}
[DataMember]
public string LastName
{
get;
set;
}
}
现在我们准备开始序列化了。让我们创建一个方法,将对象作为参数,并以JSON格式返回一个字符串:
public static string SerializeToJsonString(object objectToSerialize)
{
using (MemoryStream ms = new MemoryStream())
{
DataContractJsonSerializer serializer =
new DataContractJsonSerializer(objectToSerialize.GetType());
serializer.WriteObject(ms, objectToSerialize);
ms.Position = 0;
using (StreamReader reader = new StreamReader(ms))
{
return reader.ReadToEnd();
}
}
}
public static T Deserialize<T>(string jsonString)
{
using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(jsonString)))
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
return (T)serializer.ReadObject(ms);
}
}
以下是来自客户端代码的内容:
List<Person> persons = Deserialize<List<Person>>( jsonString );