Visual C++ .NET/Network/SoapFormatter

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Use SoapFormatter to serialize and deserialize object to xml

<source lang="csharp">

  1. include "stdafx.h"
  2. using <system.runtime.serialization.formatters.soap.dll>

using namespace System; using namespace System::IO; using namespace System::Runtime::Serialization::Formatters::Soap;

[Serializable] ref class RoleAttr { public:

   property int Charisma;
   RoleAttr(int Cha);
   void Print();

}; RoleAttr::RoleAttr(int Cha) {

   this->Charisma     = Cha;

} void RoleAttr::Print() {

   Console::WriteLine(Charisma);

} [Serializable] ref class Role { public:

   property String ^Name;
   property String ^Race;
   property String ^Class;
   property RoleAttr ^pattr;
   Role (String ^Name, String ^Race, String ^Class,int Cha);
   void Print();

}; Role::Role (String ^Name, String ^Race, String ^Class,int Cha) {

   this->Name  = Name;
   this->Race  = Race;
   this->Class = Class;
   this->pattr = gcnew RoleAttr(Cha);

} void Role::Print() {

   Console::WriteLine("Name:  {0}", Name);
   Console::WriteLine("Race:  {0}", Race);
   Console::WriteLine("Class: {0}", Class);
   pattr->Print();

} int main(void){

   Role ^r = gcnew Role("r", "H", "Thief", 11);
   r->Print();
   FileStream ^plStream = File::Create("Role.xml");
   SoapFormatter ^sf = gcnew SoapFormatter();
   sf->Serialize(plStream, r);
   plStream->Close();
   plStream = File::OpenRead("Role.xml");
   Role ^rClone = (Role^)sf->Deserialize(plStream);
   plStream->Close();
   Console::WriteLine("\nCloned r");
   rClone->Print();

}

 </source>