-
есть компонент : public class NORSqlProcedureContainer : Component, ISerializable
public NORSqlProcedureContainer(IContainer container)
: this()
public NORSqlProcedure GetProcedure(string name)
else
}
else
}
private NORSqlProcedureCollection items;
public NORSqlProcedureCollection Items
set
}
} Хотелось бы чтобы свойство Items серализовалось средой не в бинарный формат, а в XML. Подскажите, плиз, как это сделать?
-
пытался регистрировать сериализатор для св-ва Items, так : [DesignerSerializer(typeof(NORSqlProcedureContainerSerializer), typeof(XmlSerializer))]
не помогло...что не так?
-
ISerializable.GetObjectData нужно реализовать?
-
>clickmaker © (18.12.07 15:01) [2] И там руками писать с XML ?
-
> [3] Skier © (18.12.07 15:18)
а NORSqlProcedureCollection наследуется от ICollection?
вот что в MSDN:
Items That Can Be Serialized The following items can be serialized using the XmLSerializer class:
Public read/write properties and fields of public classes Classes that implement ICollection or IEnumerable
Note Only collections are serialized, not public properties.
XmlElement objects XmlNode objects DataSet objects
-
> а NORSqlProcedureCollection наследуется от ICollection?
Угу.
-
IXmlSerializable
-
Интересно. и что писать в WriteXml (XmlWriter writer) { //??? }
?
-
А вообще для чего это надо? если просто в файл, то должно хватить и просто [Serializable] (кстати его у вас нет?) на типе, а если в соап или ..., то см. выше.
-
> Skier © (18.12.07 16:26) [7]
что то типа того: writer.WriteStartElement(this.EntityName, "urn:blablabla"); ((IXmlSerializable)this.realTable).WriteXml(writer); writer.WriteEndElement();
-
>b z (18.12.07 16:27) [8]
> кстати его у вас нет?)
Есть.
> А вообще для чего это надо?
Чтобы можно было править ресурс руками в случае неожиданного краха.
-
а что у тебя делает строка ((IXmlSerializable)this.realTable).WriteXml(writer); ?
-
извините, надо уходить, вот налабал простенький пример для файлика [Serializable]
public class A
}
}
private void button1_Click_1(object sender, EventArgs e)
может вам подойдет > а что у тебя делает строка ((IXmlSerializable)this.realTable). > WriteXml(writer);
там сериализация DataTable, это я выдрал из реального проекта, можете рефлектором посмотреть ее реализацию, и по аналогии, правда там немного навернуто, еще и схема учавствует ..
-
спасибо конечно, но меня не интересует сериализация "по кнопке", меня интересует взаимодействие моего сериализатора свойства и VS
-
мда. не заметил слово "средой" тогда, на сколько я понимаю, надо смотреть в сторону DesignerSerializer и IDesignerSerializationManager, но могу и ошибатсья
-
> пытался регистрировать сериализатор для св-ва Items, так > : > [DesignerSerializer(typeof(NORSqlProcedureContainerSerializer), > typeof(XmlSerializer))] > > не помогло...что не так?
Не так то, что второй параметр должен быть CodeDomSerializer. Он единственный, на сколько я знаю, кто на данный момент поддерживается средой.
Правильный подход, как уже заметили, ISerializable.
-
>Канадец (19.12.07 01:37) [15]
> Он единственный, на сколько я знаю, кто на данный момент > поддерживается средой.
К сожалению, я тоже пришёл к такому же выводу. Бум работать (извращаться) через CodeDomSerializer
Всем спасибо!
-
> Skier © (19.12.07 10:06) [16]
Почему извращаться? Тут просто работает коде генерация, отсюда и все вытекающее. В принципе можно наверное посмотреть на локализацию. Вы тоже можете сделать свое свойство как [Localizable(true)], тогда оно для локализированных форм попадет в ресурсы, но это некрасиво и надо пробовать для сложных объектов, но на худой конец, когда много писать неохота :) По принципу локализации вы можете свой сериализатор унаследовать от CodeDomSerializer и в методах сделать свою сериализацию.
И CodeDomSerializer не единственный, тут зависит скорее от самих дизайнеров. Другое дело, что предок у них CodeDomSerializerBase. Для редактора веб форм сериализатор уже совсем другой. Думаю, что для редактора xaml, он может отличаться, хотя и там может только наследник.
А ISerializable тут совсем не причем, кто будет дергать этот интерфейс, непонятно.
-
> И CodeDomSerializer не единственный.....
Примерчик плиз. Примерчик класса который можно "подсунуть" вторым параметром в Skier © (18.12.07 14:07) [1] и получить работающий код.
> А ISerializable тут совсем не причем, кто будет дергать > этот интерфейс, непонятно.
Вот каким образом работает CodeDomSerializer: * Primitives, such as strings, integers, and floating point values. * Any object implementing System.Collections.IList including arrays. * Any object implementing System.ComponentModel.IComponent. * All enumeration types. * Any object that can be retrieved by accessing a static field, property or method, or can be created through a public constructor. * Any object that supports ISerializable will get a line of code loading that object through a resource, and object will be serialized into a resource.
|