powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / XSD в Silverlight
12 сообщений из 12, страница 1 из 1
XSD в Silverlight
    #37350642
Dmitry V. Liseev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi, All!

Есть XML-схема, по ней генерятся C# классы с помощью XSD.EXE. Эти классы не хотят компиллироваться в Silverlight. Есть ли какое решение проблемы? Проще говоря, надо сериализовать объекты в XML, заданый схемой.
...
Рейтинг: 0 / 0
XSD в Silverlight
    #37350871
Semkaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какая ошибка при компиляции?
Интуитивно догадываюсь, что эти классы помечены атрибутами
System.SerializableAttribute()
System.ComponentModel.DesignerCategoryAttribute("")
Этих атрибутов нет в silverlight - закомментируйте их и классы будут компилироваться на стороне silverlight.
...
Рейтинг: 0 / 0
XSD в Silverlight
    #37350966
Dmitry V. Liseev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SemkaaКакая ошибка при компиляции?
Интуитивно догадываюсь, что эти классы помечены атрибутами
System.SerializableAttribute()
System.ComponentModel.DesignerCategoryAttribute("")Да, эта.
SemkaaЭтих атрибутов нет в silverlight - закомментируйте их и классы будут компилироваться на стороне silverlight.
Криво это. Да и бесполезно. В silverlight еще нет XmlSerializer, XmlTextWriter и еще до фига чего, что нужно для сериализации. Нужно пересматривать концепцию проекта или рыть в сторону WCF и поиска конвертора XSD -> DataContractSerializer. Может, у кого-то другой опыт есть?
...
Рейтинг: 0 / 0
XSD в Silverlight
    #37351399
Руки-крюки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry V. Liseev,

Можно самому написать сериалайзер, в лучшем случае там кода на 20 строк.
...
Рейтинг: 0 / 0
XSD в Silverlight
    #37351749
Dmitry V. Liseev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Руки-крюкиDmitry V. Liseev,

Можно самому написать сериалайзер, в лучшем случае там кода на 20 строк.Например? У меня есть XSD примерно из десятка файлов. Он часто меняется. Мне нужно сделать классы CS, чтобы сериализовать объекты в поток и обратно.
...
Рейтинг: 0 / 0
XSD в Silverlight
    #37352422
eJack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В силвере вся работа завязана на службы WCF поэтому если класс пометить спец атрибутом (не помню сейчас, спеки нет под рукой) то он легко сериалезится в xml. Атрибутами тоже можно управлять.
...
Рейтинг: 0 / 0
XSD в Silverlight
    #37352723
Semkaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry V. LiseevКриво это. Да и бесполезно. В silverlight еще нет XmlSerializer, XmlTextWriter и еще до фига чего, что нужно для сериализации. Нужно пересматривать концепцию проекта или рыть в сторону WCF и поиска конвертора XSD -> DataContractSerializer. Может, у кого-то другой опыт есть?

Чего именно Вам не хватает на стороне silverlight для того, чтоб выполнять простую сериализацию/десериализацию объектов? Или задача более комплексная?

Вот пример 2х extension методов, которые работают на стороне silverlight. Чтобы они работали сделайте референс на System.Xml.Linq и System.Xml.Serialization.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
        public static partial class Extensions
	{

		public static XElement Serialize<T>(this T source)
		{
			XmlSerializer serializer = new XmlSerializer(typeof (T));
			StringWriter stringWriter = new StringWriter();
			serializer.Serialize(stringWriter, source);
			return XElement.Parse(stringWriter.ToString());
		}

		public static T Deserialize<T>(this XElement xml)
		{
			XmlSerializer deserializer = new XmlSerializer(typeof (T));
			return (T) deserializer.Deserialize(xml.CreateReader());
		}
	}

eJack
DataContractAttribute
...
Рейтинг: 0 / 0
XSD в Silverlight
    #37353153
Dmitry V. Liseev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SemkaaЧего именно Вам не хватает на стороне silverlight для того, чтоб выполнять простую сериализацию/десериализацию объектов? Или задача более комплексная?Мне не хватает совершенно простой вещи: У меня есть несколько файлов XSD, ссылающихся друг на друга. Мне из них нужно получить CS классы, в которых данные помечены DataMemberAttribute (если использовать DataContractSerializer) или XmlElementAttribute (если использовать XmlSerializer) с указанием order (иначе он сериализует в алфавитном порядке по названиям полей, а мне нужно строгое соответствие результата схеме) с указанием Name (поскольку в C# поле может называться "firstName", а в XSD может "first-name"). Ну и т.д.

Кроме того, нужна валидация по схеме.

Написать все классы вручную и кучу юнит-тестов к ним - кривой вариант, поскольку схема меняется. Ее другие люди пишут.
...
Рейтинг: 0 / 0
XSD в Silverlight
    #37353205
Dmitry V. Liseev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще мне не хватает в DataMemberAttribute возможности указать DataType:
Код: plaintext
1.
2.
[XmlElementAttribute("date-of-giving", DataType="date", Order=7)]
[DataMemberAttribute(Name="date-of-giving", Order = 7)]
В результате при использовании XmlSerializer получаем
Код: plaintext
<date-of-giving> 2011 - 07 - 15 </date-of-giving>
, а при использовании DataContractSerializer получаем
Код: plaintext
<date-of-giving> 2011 - 07 -15T00: 00 : 00 + 04 : 00 </date-of-giving>
, что не соответствует
Код: plaintext
<xs:element name="date-of-giving" type="xs:date">
, указанному в схеме.
...
Рейтинг: 0 / 0
XSD в Silverlight
    #37353293
Semkaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы меня немного запутали.
Если не устраивает DataContractSerializer - так не используйте его, в silverlight 4 есть XmlSerializer (и судя по документации XmlElementAttribute тоже есть и поддерживает необходимые Вам DataType и Order). Если смущает, что в классы, сгенерированные xsd.exe надо добавлять атрибуты или комментировать, чтобы работали на стороне silverlight - можно автоматизировать этот процесс, благо Вы точно знаете что и куда добавлять. Хотя здесь согласен, комплексно автоматизировать сложно, сходу я не смог найти, например, t4 templates для генерации классов из xsd схемы, чтобы этот темплейт можно было модифицировать под свои нужды (может быть вот это подойдёт http://www.olegsych.com/2008/08/t4-xsd-directive/)

У меня схожая задача, но немного попроще - не работаю с датами, не использую XmlElementAttribute. Для себя понял, что на стороне silverlight надо делать минимум телодвижений, в результате всю валидацию выполняю исключительно на сервере + предварительно правлю косяки. Единственное - да, ручками правлю атрибуты в сгенерированных классах, но схема у меня практически неизменна.
...
Рейтинг: 0 / 0
XSD в Silverlight
    #37353428
Dmitry V. Liseev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SemkaaЕсли смущает, что в классы, сгенерированные xsd.exe надо добавлять атрибуты или комментировать, чтобы работали на стороне silverlight - можно автоматизировать этот процесс, благо Вы точно знаете что и куда добавлять.Да, это один вариант. Похоже, он самый простой.

SemkaaХотя здесь согласен, комплексно автоматизировать сложно, сходу я не смог найти, например, t4 templates для генерации классов из xsd схемы, чтобы этот темплейт можно было модифицировать под свои нуждыЭто тоже вариант, только, полагаю, самый сложный.

Semkaa(может быть вот это подойдёт http://www.olegsych.com/2008/08/t4-xsd-directive/) Page Not Found

SemkaaУ меня схожая задача, но немного попроще - не работаю с датами, не использую XmlElementAttribute. Для себя понял, что на стороне silverlight надо делать минимум телодвижений, в результате всю валидацию выполняю исключительно на сервере + предварительно правлю косяки. Единственное - да, ручками правлю атрибуты в сгенерированных классах, но схема у меня практически неизменна.У меня между клиентом и сервером летают потоки XML. Надо с ними работать на обоих сторонах.
...
Рейтинг: 0 / 0
XSD в Silverlight
    #37353520
Semkaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry V. Liseev
Page Not Found

Ссылка кривая, ага. http://t4toolbox.codeplex.com/ - вот тут есть какой-то пример по xsd.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / XSD в Silverlight
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]