Передача объектов в Silverlight через серверный код asp.net - PullRequest
2 голосов
/ 10 декабря 2008

Можно ли передавать объекты (сериализуемые классы или другие способы) в элемент управления Silverlight через код на стороне сервера asp.net?

1 Ответ

3 голосов
/ 10 декабря 2008

Ну, это будет связано с сериализацией. Помните - ваш клиент Silverlight отключен от сервера, так же как браузер отключен от сервера.

Здесь есть отличная статья о сериализации JSON и из Silverlight. Вот краткое изложение статьи:

Давайте начнем с краткого представления о том, что такое JSON. Он обозначает J ava S cript O bject N и используется как альтернатива 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 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...