powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Сериализациая своими руками.
6 сообщений из 6, страница 1 из 1
Сериализациая своими руками.
    #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
Сериализациая своими руками.
    #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
Сериализациая своими руками.
    #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
Сериализациая своими руками.
    #33757710
Фотография Viktor Bartel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день,

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

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

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


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