通过服务器端asp.net代码将对象传递给silverlight

时间:2008-12-09 22:18:17

标签: c# asp.net silverlight

是否可以通过asp.net服务器端代码将对象(可序列化类或其他方式)传递给Silverlight控件?

1 个答案:

答案 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 );