Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Сериализациая своими руками. / 6 сообщений из 6, страница 1 из 1
26.05.2006, 11:59
    #33753708
Viktor Bartel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализациая своими руками.
Добрый день,

Помогите пожалуйста разабратся как правильно использовать сериализацию объектов в .NET. Допустим у меня есть Хеш таблица my_hash1 и я хочу ее передать в веб метод MethodTestHT(), что бы далее ее обработать. Так вот я создал класс который будет сериализовать и десериализовать поток XML, в частности в данном классе я реализую селдующий интерфейс:
Код: plaintext
1.
2.
3.
4.
5.
6.
interface IXmlSerializable
{
    XmlSchema GetSchema();
    void ReadXml(XmlReader reader);
    void WriteXml(XmlWriter writer);
}
И далее я выполняю сериализацию в поток или в файл, но вот пока не совсем понятно как веб сервис "поймет" откуда нужно брать сериализированные данные? И нужно ли передовать объект как параметр веб сервису(и он потом сам разберется как его обрабатывать)? Буду рад любой информации по данной теме.
...
Рейтинг: 0 / 0
26.05.2006, 12:52
    #33753948
Viktor Bartel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализациая своими руками.
Так вот, я более менее разобрался с сериализацией, но вот возникла следующая проблема, вот мой класс:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
	public class SerializableDictionary : IXmlSerializable
	{
		const string NS = "http://www.tetco.fr/xml/serialization";
		private IDictionary dictionary;

		public SerializableDictionary()
		{
			dictionary = new Hashtable();
		}
		public SerializableDictionary(IDictionary dictionary)
		{
			this.dictionary = dictionary;
		}

		void IXmlSerializable.WriteXml(XmlWriter w)
		{
			w.WriteStartElement("dictionary", NS);
			foreach(object key in dictionary.Keys)
			{
				object value = dictionary[key];
				w.WriteStartElement("item", NS);
				w.WriteElementString("key", NS, key.ToString());
				w.WriteElementString("value", NS, value.ToString());
				w.WriteEndElement();
			}
			w.WriteEndElement();
		}

		void IXmlSerializable.ReadXml(XmlReader r)
		{
			r.Read();
			r.ReadStartElement("dictionary");
			while(r.NodeType != XmlNodeType.EndElement)
			{
				r.ReadStartElement("item", NS);
				string key = r.ReadElementString("key", NS);
				string value = r.ReadElementString("value", NS);
				r.ReadEndElement();
				r.MoveToContent();
				dictionary.Add(key, value);
			}
		}

		XmlSchema IXmlSerializable.GetSchema() { return null; }
         }
Но вот что генерирует Вижуал Студио для данного метода:
Код: plaintext
1.
2.
3.
4.
5.
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://www.tetco.fr/TestWS", RequestNamespace="http://www.tetco.fr", ResponseNamespace="http://www.tetco.fr", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
        public System.Data.DataSet TestWS() {
            object[] results = this.Invoke("TestWS", new object[ 0 ]);
            return ((System.Data.DataSet)(results[ 0 ]));
        }
Только вот причем здесь датасет? И естстественно когда я в коде делаю следующее то получаю ошибку о несовместимости типов:
Код: plaintext
1.
2.
			localhost.ClassOfServicesWS classofserv = new localhost.ClassOfServicesWS();
			myHashTable = classofserv.TestWS();
И в конце концов получаю сообщение что не возможно експлиситное приведение типов
ХэшТейбла в ДатаСет. Не понимаю в чем дело, и причем здесь вообще датасет.
...
Рейтинг: 0 / 0
26.05.2006, 12:58
    #33753977
Viktor Bartel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализациая своими руками.
Вот более подробный код теста:
Код: plaintext
1.
2.
3.
	SerializableDictionary dic = new SerializableDictionary();
	localhost.ClassOfServicesWS classofserv = new localhost.ClassOfServicesWS();
	dic = classofserv.TestWS();
И что я получаю(по фр но все равно понятна :) ):
Impossible de convertir implicitement le type 'System.Data.DataSet' en 'BusinessObjects.SerializableDictionary'

--
С уважением
Виктор Бартель
...
Рейтинг: 0 / 0
29.05.2006, 11:48
    #33757710
Viktor Bartel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализациая своими руками.
Добрый день,

Неужели никто не сталкивался с похожей проблемой ???

--
С уважением
Виктор Бартель
...
Рейтинг: 0 / 0
29.05.2006, 12:20
    #33757810
Dats
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализациая своими руками.
А вот это зачем? Попробуйте закоментировать.
> XmlSchema IXmlSerializable.GetSchema() { return null; }
...
Рейтинг: 0 / 0
29.05.2006, 16:58
    #33758775
Viktor Bartel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сериализациая своими руками.
Как зачем, этот метод обязателен в интерфейсе IXmlSerializable, иначе самопальной сериализации не получится. См итерфейс IXmlSerializable

--
С уважением
Виктор Бартель
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Сериализациая своими руками. / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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