2010-11-17 4 views
1

Я использую SubSonic 2 некоторое время, но по мере того как я начинаю новый проект, я хотел бы обновить до 3. В моем старом проекте я использовал обычную, - неустойчивый взлом для сериализации вещей для веб-сервисов. Я действительно хотел бы найти более элегантное решение.Селективная сериализация с порожденными SubSonic классами

Я использую Mono, поэтому мне нужно оставаться внутри реализованных классов, например. Вероятно, DataContractSerializer. Все еще на ASMX, хотя хотелось бы перейти на WCF, как только поддержка будет твердой. Первоначальными клиентами станут Moonlight/Silverlight. JSON/protobuf в будущем ...

Стандартный Xml-сериализатор отказался, поэтому мне нужен какой-то способ взять его под контроль. Это подводит меня к IXmlSerializable. Я довольно незнакома с шаблонами SS, но кажется, что их редактирование позволило бы мне генерировать код сериализации, необходимый, чтобы не трогать остальную цепочку иерархии. Это хорошая идея"?

Я хотел бы просто использовать поддержку POCO SS, но я не думаю, что он поддерживает сложные типы или массивы.

Другие мысли/варианты?

ответ

1

IXmlSerializable является ИМО более чем неудобным, чтобы получить право. Обратите внимание: если вы обрабатываете код XmlSerializer, вы можете переопределить все во время выполнения, используя конструктор, который принимает XmlAttributeOverrides (но если вы используете его, вы должны кэшировать и повторно использовать экземпляр XmlSerializer, иначе он будет просачиваться, как сито).

Вы кратко упомяните protobuf; обратите внимание, что protobuf-net (даже v1) позволяет добавлять данные члена уровня сериализации в типа уровня, так что вы можете включить эту информацию в частичном классе наряду с типом сгенерированного:

// file 1 
partial class GeneratedClass 
{ 
    public int Foo { get; set; } 
    public string Bar { get; set; } 
} 
// file 2 
[ProtoPartialMember(1, "Foo")] 
[ProtoPartialIgnore("Bar")] 
partial class GeneratedClass {} 
+0

Спасибо Марка, большой вентилятор вашей реализации protobuf, безумно быстро. Хотя я могу управлять сериализацией вручную, эндшпиль состоит в том, что другие люди могут также использовать веб-службы. Я надеялся иметь более автоматический подход, например. пользователю предоставляется XSD/WSDL, который не упоминает остальную иерархию SS. Затем они генерируют свои классы из него и т. Д. – joe

+0

@joe - в этом случае я бы рекомендовал просто создать отдельный слой DTO, который * аналогичен * для типов SS, но под вашей прямой командой. –

+0

Это было мое оригинальное обходное решение. :) Хотя я сделал это вручную, что я подразумевал под неустойчивым. Полагаю, это может быть довольно автоматическое с SS шаблонами, а? Я попробую это и опубликую результаты. – joe