Можно ли передавать объекты (сериализуемые классы или другие способы) элементу управления Silverlight через код на стороне сервера asp.net?
Передать объекты в silverlight через код asp.net на стороне сервера
Ответы (1)
Ну, это будет связано с сериализацией. Помните: ваш клиент Silverlight отключен от сервера, точно так же, как браузер отключен от сервера.
Существует отличная статья здесь по JSON. сериализация в Silverlight и обратно. Вот краткое изложение статьи:
Давайте начнем с краткого введения в то, что такое JSON. Он расшифровывается как JavaScript Object 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 );