Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> XmlSerializer или SoapFormatter ? XmlSerializer или SoapFormatter ? 
V
    Опции темы
cosamia
Дата 25.12.2005, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 11.5.2005

Репутация: нет
Всего: нет



Что -то неуловил разницу. Если делаю бинари сериализацию использую BinaryFormatter, если делаю xml сериализацию использую SoapFormatter.
Но зачем нужен XmlSerializer, ведь как я понимаю он выполняет ту же функцию что и SoapFormatter.
например:
XmlSerializer xsrz = new XmlSerializer();
FileStream fs = new FileStream("data.xml", FileMode.Open);
xsrz.Serialize(fs, class1);

Так зачем же тогда нужен XmlSerializer если прекрасно можно обойтись SoapFormatter:
FileStream fs = new FileStream("data.xml", FileMode.Create);
SoapFormatter formatter= new SoapFormatter();
formatter.Serialize(fs, class1);
PM   Вверх
mr.DUDA
Дата 26.12.2005, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Дело в том, что SoapFormatter выдаёт результат в специальном формате, используемом в протоколе SOAP, а XmlSerializer - в более упрощённом формате. Результаты получаются совершенно разные:
Код
using System;
using System.IO;
using System.Xml.Serialization;
using System.Runtime.Serialization.Formatters.Soap;

[Serializable]
public class MyClass
{
    public string A;
    public int B;
    public MyInnerClass C;
    public MyClass() { }
}

[Serializable]
public class MyInnerClass
{
    public float D;
    public MyInnerClass() { }
}

class Test
{
    public static void Main()
    {
        MyClass obj = new MyClass();
        obj.A = "AAA";
        obj.B = 123;
        obj.C = new MyInnerClass();
        obj.C.D = 456f;

        FileStream fs1 = File.Create("c:\\1.xml");
        SoapFormatter sf = new SoapFormatter();
        sf.Serialize(fs1, obj);

        FileStream fs2 = File.Create("c:\\2.xml");
        XmlSerializer xs = new XmlSerializer(typeof(MyClass));
        xs.Serialize(fs2, obj);
    }

}


Содержимое 1.xml (SOAP):
Код
<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:clr="http://schemas.microsoft.com/soap/encoding/clr/1.0" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<a1:MyClass id="ref-1" xmlns:a1="http://schemas.microsoft.com/clr/assem/ConsoleApplication1%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3Dnull">
<A id="ref-3">AAA</A>
<B>123</B>
<C href="#ref-4"/>
</a1:MyClass>
<a1:MyInnerClass id="ref-4" xmlns:a1="http://schemas.microsoft.com/clr/assem/ConsoleApplication1%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3Dnull">
<D>456</D>
</a1:MyInnerClass>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>


Содержимое 2.xml (XmlSerializer):
Код
<?xml version="1.0"?>
<MyClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <A>AAA</A>
  <B>123</B>
  <C>
    <D>456</D>
  </C>
</MyClass>



--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0401 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.