Je souhaite implémenter ISerializable dans une classe. J'ai cherché un peu
partout, et je n'arrive pas à accéder à Serialize lorsque j'utilise ma
classe. Voici le code de la classe (classeDeBase) :
using System.Windows.Forms;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
using System.Security.Permissions;
namespace Design_Patterns
{
[Serializable]
public class classeDeBase : ISerializable
{
protected classeDeBase(SerializationInfo info, StreamingContext
context){}
[SecurityPermissionAttribute(SecurityAction.Demand,
SerializationFormatter = true)]
void ISerializable.GetObjectData(SerializationInfo info,
StreamingContext context)
{
info.AddValue ("coucou", true );
}
}
}
Votre aide sera bienvenue (comme vous le voyez je débute en C#).
Christian
Je souhaite implémenter ISerializable dans une classe. J'ai cherché un peu
partout, et je n'arrive pas à accéder à Serialize lorsque j'utilise ma
classe. Voici le code de la classe (classeDeBase) :
using System.Windows.Forms;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
using System.Security.Permissions;
namespace Design_Patterns
{
[Serializable]
public class classeDeBase : ISerializable
{
protected classeDeBase(SerializationInfo info, StreamingContext
context){}
[SecurityPermissionAttribute(SecurityAction.Demand,
SerializationFormatter = true)]
void ISerializable.GetObjectData(SerializationInfo info,
StreamingContext context)
{
info.AddValue ("coucou", true );
}
}
}
Votre aide sera bienvenue (comme vous le voyez je débute en C#).
Christian
Je souhaite implémenter ISerializable dans une classe. J'ai cherché un peu
partout, et je n'arrive pas à accéder à Serialize lorsque j'utilise ma
classe. Voici le code de la classe (classeDeBase) :
using System.Windows.Forms;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
using System.Security.Permissions;
namespace Design_Patterns
{
[Serializable]
public class classeDeBase : ISerializable
{
protected classeDeBase(SerializationInfo info, StreamingContext
context){}
[SecurityPermissionAttribute(SecurityAction.Demand,
SerializationFormatter = true)]
void ISerializable.GetObjectData(SerializationInfo info,
StreamingContext context)
{
info.AddValue ("coucou", true );
}
}
}
Votre aide sera bienvenue (comme vous le voyez je débute en C#).
Christian
Bonjour,
Cf la doc :
http://msdn.microsoft.com/fr-fr/library/szzyf24s(VS.80).aspx
Serialize fait partie d'une autre classe qui va sérialiser l'objet.
ISerializable ne fait que fournir les infos (ce qui permet de sérialiser
sous des formats divers et variés selon le serializeur utilisé) si bsesoin
est. Par exemple commencer par sérializer une classe avec des types de
base que le sérializateur va savoir gérer...
--
Patrice
"Christian Hubert-Hugoud / weabow - Xtrem7 - Groobax"
a écrit dans le message de news:%Je souhaite implémenter ISerializable dans une classe. J'ai cherché un
peu partout, et je n'arrive pas à accéder à Serialize lorsque j'utilise
ma classe. Voici le code de la classe (classeDeBase) :
using System.Windows.Forms;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
using System.Security.Permissions;
namespace Design_Patterns
{
[Serializable]
public class classeDeBase : ISerializable
{
protected classeDeBase(SerializationInfo info, StreamingContext
context){}
[SecurityPermissionAttribute(SecurityAction.Demand,
SerializationFormatter = true)]
void ISerializable.GetObjectData(SerializationInfo info,
StreamingContext context)
{
info.AddValue ("coucou", true );
}
}
}
Votre aide sera bienvenue (comme vous le voyez je débute en C#).
Christian
Bonjour,
Cf la doc :
http://msdn.microsoft.com/fr-fr/library/szzyf24s(VS.80).aspx
Serialize fait partie d'une autre classe qui va sérialiser l'objet.
ISerializable ne fait que fournir les infos (ce qui permet de sérialiser
sous des formats divers et variés selon le serializeur utilisé) si bsesoin
est. Par exemple commencer par sérializer une classe avec des types de
base que le sérializateur va savoir gérer...
--
Patrice
"Christian Hubert-Hugoud / weabow - Xtrem7 - Groobax" <nospam@weabow.com>
a écrit dans le message de news:%23XgasX1mKHA.4648@TK2MSFTNGP06.phx.gbl...
Je souhaite implémenter ISerializable dans une classe. J'ai cherché un
peu partout, et je n'arrive pas à accéder à Serialize lorsque j'utilise
ma classe. Voici le code de la classe (classeDeBase) :
using System.Windows.Forms;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
using System.Security.Permissions;
namespace Design_Patterns
{
[Serializable]
public class classeDeBase : ISerializable
{
protected classeDeBase(SerializationInfo info, StreamingContext
context){}
[SecurityPermissionAttribute(SecurityAction.Demand,
SerializationFormatter = true)]
void ISerializable.GetObjectData(SerializationInfo info,
StreamingContext context)
{
info.AddValue ("coucou", true );
}
}
}
Votre aide sera bienvenue (comme vous le voyez je débute en C#).
Christian
Bonjour,
Cf la doc :
http://msdn.microsoft.com/fr-fr/library/szzyf24s(VS.80).aspx
Serialize fait partie d'une autre classe qui va sérialiser l'objet.
ISerializable ne fait que fournir les infos (ce qui permet de sérialiser
sous des formats divers et variés selon le serializeur utilisé) si bsesoin
est. Par exemple commencer par sérializer une classe avec des types de
base que le sérializateur va savoir gérer...
--
Patrice
"Christian Hubert-Hugoud / weabow - Xtrem7 - Groobax"
a écrit dans le message de news:%Je souhaite implémenter ISerializable dans une classe. J'ai cherché un
peu partout, et je n'arrive pas à accéder à Serialize lorsque j'utilise
ma classe. Voici le code de la classe (classeDeBase) :
using System.Windows.Forms;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
using System.Security.Permissions;
namespace Design_Patterns
{
[Serializable]
public class classeDeBase : ISerializable
{
protected classeDeBase(SerializationInfo info, StreamingContext
context){}
[SecurityPermissionAttribute(SecurityAction.Demand,
SerializationFormatter = true)]
void ISerializable.GetObjectData(SerializationInfo info,
StreamingContext context)
{
info.AddValue ("coucou", true );
}
}
}
Votre aide sera bienvenue (comme vous le voyez je débute en C#).
Christian
Merci.
Ce n'est pas exactement ce que je souhaitais faire : si je peux surcharger
GetObjectData, cela me permet de sérialiser exactement ce dont j'ai
besoin, et non la classe elle-même.
Typiquement, en VB6, j'aurais écrit une fonction Save. Ici, je voudrais
écrire un XML avec les champs que je contrôle parfaitement au travers de
l'appel de GetObjectData.
Je ne sais pas si je peux le faire en XML, du fait même de la structure
XML.
Christian
"Patrice" <http://scribe-fr.blogspot.com/> a écrit dans le message de
news:Bonjour,
Cf la doc :
http://msdn.microsoft.com/fr-fr/library/szzyf24s(VS.80).aspx
Serialize fait partie d'une autre classe qui va sérialiser l'objet.
ISerializable ne fait que fournir les infos (ce qui permet de sérialiser
sous des formats divers et variés selon le serializeur utilisé) si
bsesoin est. Par exemple commencer par sérializer une classe avec des
types de base que le sérializateur va savoir gérer...
--
Patrice
"Christian Hubert-Hugoud / weabow - Xtrem7 - Groobax"
a écrit dans le message de
news:%Je souhaite implémenter ISerializable dans une classe. J'ai cherché un
peu partout, et je n'arrive pas à accéder à Serialize lorsque j'utilise
ma classe. Voici le code de la classe (classeDeBase) :
using System.Windows.Forms;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
using System.Security.Permissions;
namespace Design_Patterns
{
[Serializable]
public class classeDeBase : ISerializable
{
protected classeDeBase(SerializationInfo info, StreamingContext
context){}
[SecurityPermissionAttribute(SecurityAction.Demand,
SerializationFormatter = true)]
void ISerializable.GetObjectData(SerializationInfo info,
StreamingContext context)
{
info.AddValue ("coucou", true );
}
}
}
Votre aide sera bienvenue (comme vous le voyez je débute en C#).
Christian
Merci.
Ce n'est pas exactement ce que je souhaitais faire : si je peux surcharger
GetObjectData, cela me permet de sérialiser exactement ce dont j'ai
besoin, et non la classe elle-même.
Typiquement, en VB6, j'aurais écrit une fonction Save. Ici, je voudrais
écrire un XML avec les champs que je contrôle parfaitement au travers de
l'appel de GetObjectData.
Je ne sais pas si je peux le faire en XML, du fait même de la structure
XML.
Christian
"Patrice" <http://scribe-fr.blogspot.com/> a écrit dans le message de
news:OTAWx46mKHA.2544@TK2MSFTNGP04.phx.gbl...
Bonjour,
Cf la doc :
http://msdn.microsoft.com/fr-fr/library/szzyf24s(VS.80).aspx
Serialize fait partie d'une autre classe qui va sérialiser l'objet.
ISerializable ne fait que fournir les infos (ce qui permet de sérialiser
sous des formats divers et variés selon le serializeur utilisé) si
bsesoin est. Par exemple commencer par sérializer une classe avec des
types de base que le sérializateur va savoir gérer...
--
Patrice
"Christian Hubert-Hugoud / weabow - Xtrem7 - Groobax" <nospam@weabow.com>
a écrit dans le message de
news:%23XgasX1mKHA.4648@TK2MSFTNGP06.phx.gbl...
Je souhaite implémenter ISerializable dans une classe. J'ai cherché un
peu partout, et je n'arrive pas à accéder à Serialize lorsque j'utilise
ma classe. Voici le code de la classe (classeDeBase) :
using System.Windows.Forms;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
using System.Security.Permissions;
namespace Design_Patterns
{
[Serializable]
public class classeDeBase : ISerializable
{
protected classeDeBase(SerializationInfo info, StreamingContext
context){}
[SecurityPermissionAttribute(SecurityAction.Demand,
SerializationFormatter = true)]
void ISerializable.GetObjectData(SerializationInfo info,
StreamingContext context)
{
info.AddValue ("coucou", true );
}
}
}
Votre aide sera bienvenue (comme vous le voyez je débute en C#).
Christian
Merci.
Ce n'est pas exactement ce que je souhaitais faire : si je peux surcharger
GetObjectData, cela me permet de sérialiser exactement ce dont j'ai
besoin, et non la classe elle-même.
Typiquement, en VB6, j'aurais écrit une fonction Save. Ici, je voudrais
écrire un XML avec les champs que je contrôle parfaitement au travers de
l'appel de GetObjectData.
Je ne sais pas si je peux le faire en XML, du fait même de la structure
XML.
Christian
"Patrice" <http://scribe-fr.blogspot.com/> a écrit dans le message de
news:Bonjour,
Cf la doc :
http://msdn.microsoft.com/fr-fr/library/szzyf24s(VS.80).aspx
Serialize fait partie d'une autre classe qui va sérialiser l'objet.
ISerializable ne fait que fournir les infos (ce qui permet de sérialiser
sous des formats divers et variés selon le serializeur utilisé) si
bsesoin est. Par exemple commencer par sérializer une classe avec des
types de base que le sérializateur va savoir gérer...
--
Patrice
"Christian Hubert-Hugoud / weabow - Xtrem7 - Groobax"
a écrit dans le message de
news:%Je souhaite implémenter ISerializable dans une classe. J'ai cherché un
peu partout, et je n'arrive pas à accéder à Serialize lorsque j'utilise
ma classe. Voici le code de la classe (classeDeBase) :
using System.Windows.Forms;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
using System.Security.Permissions;
namespace Design_Patterns
{
[Serializable]
public class classeDeBase : ISerializable
{
protected classeDeBase(SerializationInfo info, StreamingContext
context){}
[SecurityPermissionAttribute(SecurityAction.Demand,
SerializationFormatter = true)]
void ISerializable.GetObjectData(SerializationInfo info,
StreamingContext context)
{
info.AddValue ("coucou", true );
}
}
}
Votre aide sera bienvenue (comme vous le voyez je débute en C#).
Christian
Serialize est la méthode qui effectue la sérialization. Le "n'arrive pas à
accéder à Serialize" me faisait donc penser que tu n'arrivais pas à
utiliser le sérialiseur ce qui n'est pas directement à l'implémentation de
ISerializable.
Je crois maintenant comprendre que le problème est d'ignorer un champ
auquel cas il suffit de lui appliquer un attribut NonSerialized...
Sinon expliquer plus précisemment "sérialiser exactement ce dont j'ai
besoin" (par exemple un exemple de classe avec 2/3 champs, le XML obtenu
et le changement que l'on voudrait apporter, pour l'instant je crois
comprendre qu'il s"agit juste d"ignorer un champ)
--
Patrice
"Christian Hubert-Hugoud / weabow - Xtrem7 - Groobax"
a écrit dans le message de news:uYfw9O%Merci.
Ce n'est pas exactement ce que je souhaitais faire : si je peux
surcharger GetObjectData, cela me permet de sérialiser exactement ce dont
j'ai besoin, et non la classe elle-même.
Typiquement, en VB6, j'aurais écrit une fonction Save. Ici, je voudrais
écrire un XML avec les champs que je contrôle parfaitement au travers de
l'appel de GetObjectData.
Je ne sais pas si je peux le faire en XML, du fait même de la structure
XML.
Christian
"Patrice" <http://scribe-fr.blogspot.com/> a écrit dans le message de
news:Bonjour,
Cf la doc :
http://msdn.microsoft.com/fr-fr/library/szzyf24s(VS.80).aspx
Serialize fait partie d'une autre classe qui va sérialiser l'objet.
ISerializable ne fait que fournir les infos (ce qui permet de sérialiser
sous des formats divers et variés selon le serializeur utilisé) si
bsesoin est. Par exemple commencer par sérializer une classe avec des
types de base que le sérializateur va savoir gérer...
--
Patrice
"Christian Hubert-Hugoud / weabow - Xtrem7 - Groobax"
a écrit dans le message de
news:%Je souhaite implémenter ISerializable dans une classe. J'ai cherché un
peu partout, et je n'arrive pas à accéder à Serialize lorsque j'utilise
ma classe. Voici le code de la classe (classeDeBase) :
using System.Windows.Forms;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
using System.Security.Permissions;
namespace Design_Patterns
{
[Serializable]
public class classeDeBase : ISerializable
{
protected classeDeBase(SerializationInfo info, StreamingContext
context){}
[SecurityPermissionAttribute(SecurityAction.Demand,
SerializationFormatter = true)]
void ISerializable.GetObjectData(SerializationInfo info,
StreamingContext context)
{
info.AddValue ("coucou", true );
}
}
}
Votre aide sera bienvenue (comme vous le voyez je débute en C#).
Christian
Serialize est la méthode qui effectue la sérialization. Le "n'arrive pas à
accéder à Serialize" me faisait donc penser que tu n'arrivais pas à
utiliser le sérialiseur ce qui n'est pas directement à l'implémentation de
ISerializable.
Je crois maintenant comprendre que le problème est d'ignorer un champ
auquel cas il suffit de lui appliquer un attribut NonSerialized...
Sinon expliquer plus précisemment "sérialiser exactement ce dont j'ai
besoin" (par exemple un exemple de classe avec 2/3 champs, le XML obtenu
et le changement que l'on voudrait apporter, pour l'instant je crois
comprendre qu'il s"agit juste d"ignorer un champ)
--
Patrice
"Christian Hubert-Hugoud / weabow - Xtrem7 - Groobax" <nospam@weabow.com>
a écrit dans le message de news:uYfw9O%23mKHA.1556@TK2MSFTNGP05.phx.gbl...
Merci.
Ce n'est pas exactement ce que je souhaitais faire : si je peux
surcharger GetObjectData, cela me permet de sérialiser exactement ce dont
j'ai besoin, et non la classe elle-même.
Typiquement, en VB6, j'aurais écrit une fonction Save. Ici, je voudrais
écrire un XML avec les champs que je contrôle parfaitement au travers de
l'appel de GetObjectData.
Je ne sais pas si je peux le faire en XML, du fait même de la structure
XML.
Christian
"Patrice" <http://scribe-fr.blogspot.com/> a écrit dans le message de
news:OTAWx46mKHA.2544@TK2MSFTNGP04.phx.gbl...
Bonjour,
Cf la doc :
http://msdn.microsoft.com/fr-fr/library/szzyf24s(VS.80).aspx
Serialize fait partie d'une autre classe qui va sérialiser l'objet.
ISerializable ne fait que fournir les infos (ce qui permet de sérialiser
sous des formats divers et variés selon le serializeur utilisé) si
bsesoin est. Par exemple commencer par sérializer une classe avec des
types de base que le sérializateur va savoir gérer...
--
Patrice
"Christian Hubert-Hugoud / weabow - Xtrem7 - Groobax"
<nospam@weabow.com> a écrit dans le message de
news:%23XgasX1mKHA.4648@TK2MSFTNGP06.phx.gbl...
Je souhaite implémenter ISerializable dans une classe. J'ai cherché un
peu partout, et je n'arrive pas à accéder à Serialize lorsque j'utilise
ma classe. Voici le code de la classe (classeDeBase) :
using System.Windows.Forms;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
using System.Security.Permissions;
namespace Design_Patterns
{
[Serializable]
public class classeDeBase : ISerializable
{
protected classeDeBase(SerializationInfo info, StreamingContext
context){}
[SecurityPermissionAttribute(SecurityAction.Demand,
SerializationFormatter = true)]
void ISerializable.GetObjectData(SerializationInfo info,
StreamingContext context)
{
info.AddValue ("coucou", true );
}
}
}
Votre aide sera bienvenue (comme vous le voyez je débute en C#).
Christian
Serialize est la méthode qui effectue la sérialization. Le "n'arrive pas à
accéder à Serialize" me faisait donc penser que tu n'arrivais pas à
utiliser le sérialiseur ce qui n'est pas directement à l'implémentation de
ISerializable.
Je crois maintenant comprendre que le problème est d'ignorer un champ
auquel cas il suffit de lui appliquer un attribut NonSerialized...
Sinon expliquer plus précisemment "sérialiser exactement ce dont j'ai
besoin" (par exemple un exemple de classe avec 2/3 champs, le XML obtenu
et le changement que l'on voudrait apporter, pour l'instant je crois
comprendre qu'il s"agit juste d"ignorer un champ)
--
Patrice
"Christian Hubert-Hugoud / weabow - Xtrem7 - Groobax"
a écrit dans le message de news:uYfw9O%Merci.
Ce n'est pas exactement ce que je souhaitais faire : si je peux
surcharger GetObjectData, cela me permet de sérialiser exactement ce dont
j'ai besoin, et non la classe elle-même.
Typiquement, en VB6, j'aurais écrit une fonction Save. Ici, je voudrais
écrire un XML avec les champs que je contrôle parfaitement au travers de
l'appel de GetObjectData.
Je ne sais pas si je peux le faire en XML, du fait même de la structure
XML.
Christian
"Patrice" <http://scribe-fr.blogspot.com/> a écrit dans le message de
news:Bonjour,
Cf la doc :
http://msdn.microsoft.com/fr-fr/library/szzyf24s(VS.80).aspx
Serialize fait partie d'une autre classe qui va sérialiser l'objet.
ISerializable ne fait que fournir les infos (ce qui permet de sérialiser
sous des formats divers et variés selon le serializeur utilisé) si
bsesoin est. Par exemple commencer par sérializer une classe avec des
types de base que le sérializateur va savoir gérer...
--
Patrice
"Christian Hubert-Hugoud / weabow - Xtrem7 - Groobax"
a écrit dans le message de
news:%Je souhaite implémenter ISerializable dans une classe. J'ai cherché un
peu partout, et je n'arrive pas à accéder à Serialize lorsque j'utilise
ma classe. Voici le code de la classe (classeDeBase) :
using System.Windows.Forms;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
using System.Security.Permissions;
namespace Design_Patterns
{
[Serializable]
public class classeDeBase : ISerializable
{
protected classeDeBase(SerializationInfo info, StreamingContext
context){}
[SecurityPermissionAttribute(SecurityAction.Demand,
SerializationFormatter = true)]
void ISerializable.GetObjectData(SerializationInfo info,
StreamingContext context)
{
info.AddValue ("coucou", true );
}
}
}
Votre aide sera bienvenue (comme vous le voyez je débute en C#).
Christian
Euh c'est bien XML ? le code original semblait plutôt vouloir utiliser un
"BinaryFormatter". Je proposerai de démarrer avec :
using System;
using System.Xml.Serialization;
namespace ConsoleApplication1
{
public class Data
{
public string a;
[XmlIgnore] public string b;
public string c;
}
class Program
{
static void Main(string[] args)
{
Data data = new Data { a = "A", b = "B", c = "C" };
XmlSerializer xml = new XmlSerializer(typeof(Data));
xml.Serialize(Console.Out, data);
Console.ReadKey();
}
}
}
Ce qui donne :
<?xml version="1.0" encoding="ibm850"?>
<Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<a>A</a>
<c>C</c>
</Data>
Donc B n'est pas sérialisé. Que veut on changer à partir de ce point de
départ ?
--
Patrice
"Patrice" <http://scribe-fr.blogspot.com/> a écrit dans le message de
news:Serialize est la méthode qui effectue la sérialization. Le "n'arrive pas
à accéder à Serialize" me faisait donc penser que tu n'arrivais pas à
utiliser le sérialiseur ce qui n'est pas directement à l'implémentation
de ISerializable.
Je crois maintenant comprendre que le problème est d'ignorer un champ
auquel cas il suffit de lui appliquer un attribut NonSerialized...
Sinon expliquer plus précisemment "sérialiser exactement ce dont j'ai
besoin" (par exemple un exemple de classe avec 2/3 champs, le XML obtenu
et le changement que l'on voudrait apporter, pour l'instant je crois
comprendre qu'il s"agit juste d"ignorer un champ)
--
Patrice
"Christian Hubert-Hugoud / weabow - Xtrem7 - Groobax"
a écrit dans le message de
news:uYfw9O%Merci.
Ce n'est pas exactement ce que je souhaitais faire : si je peux
surcharger GetObjectData, cela me permet de sérialiser exactement ce
dont j'ai besoin, et non la classe elle-même.
Typiquement, en VB6, j'aurais écrit une fonction Save. Ici, je voudrais
écrire un XML avec les champs que je contrôle parfaitement au travers de
l'appel de GetObjectData.
Je ne sais pas si je peux le faire en XML, du fait même de la structure
XML.
Christian
"Patrice" <http://scribe-fr.blogspot.com/> a écrit dans le message de
news:Bonjour,
Cf la doc :
http://msdn.microsoft.com/fr-fr/library/szzyf24s(VS.80).aspx
Serialize fait partie d'une autre classe qui va sérialiser l'objet.
ISerializable ne fait que fournir les infos (ce qui permet de
sérialiser sous des formats divers et variés selon le serializeur
utilisé) si bsesoin est. Par exemple commencer par sérializer une
classe avec des types de base que le sérializateur va savoir gérer...
--
Patrice
"Christian Hubert-Hugoud / weabow - Xtrem7 - Groobax"
a écrit dans le message de
news:%Je souhaite implémenter ISerializable dans une classe. J'ai cherché un
peu partout, et je n'arrive pas à accéder à Serialize lorsque
j'utilise ma classe. Voici le code de la classe (classeDeBase) :
using System.Windows.Forms;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
using System.Security.Permissions;
namespace Design_Patterns
{
[Serializable]
public class classeDeBase : ISerializable
{
protected classeDeBase(SerializationInfo info, StreamingContext
context){}
[SecurityPermissionAttribute(SecurityAction.Demand,
SerializationFormatter = true)]
void ISerializable.GetObjectData(SerializationInfo info,
StreamingContext context)
{
info.AddValue ("coucou", true );
}
}
}
Votre aide sera bienvenue (comme vous le voyez je débute en C#).
Christian
Euh c'est bien XML ? le code original semblait plutôt vouloir utiliser un
"BinaryFormatter". Je proposerai de démarrer avec :
using System;
using System.Xml.Serialization;
namespace ConsoleApplication1
{
public class Data
{
public string a;
[XmlIgnore] public string b;
public string c;
}
class Program
{
static void Main(string[] args)
{
Data data = new Data { a = "A", b = "B", c = "C" };
XmlSerializer xml = new XmlSerializer(typeof(Data));
xml.Serialize(Console.Out, data);
Console.ReadKey();
}
}
}
Ce qui donne :
<?xml version="1.0" encoding="ibm850"?>
<Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<a>A</a>
<c>C</c>
</Data>
Donc B n'est pas sérialisé. Que veut on changer à partir de ce point de
départ ?
--
Patrice
"Patrice" <http://scribe-fr.blogspot.com/> a écrit dans le message de
news:ubcsHkBnKHA.6084@TK2MSFTNGP02.phx.gbl...
Serialize est la méthode qui effectue la sérialization. Le "n'arrive pas
à accéder à Serialize" me faisait donc penser que tu n'arrivais pas à
utiliser le sérialiseur ce qui n'est pas directement à l'implémentation
de ISerializable.
Je crois maintenant comprendre que le problème est d'ignorer un champ
auquel cas il suffit de lui appliquer un attribut NonSerialized...
Sinon expliquer plus précisemment "sérialiser exactement ce dont j'ai
besoin" (par exemple un exemple de classe avec 2/3 champs, le XML obtenu
et le changement que l'on voudrait apporter, pour l'instant je crois
comprendre qu'il s"agit juste d"ignorer un champ)
--
Patrice
"Christian Hubert-Hugoud / weabow - Xtrem7 - Groobax" <nospam@weabow.com>
a écrit dans le message de
news:uYfw9O%23mKHA.1556@TK2MSFTNGP05.phx.gbl...
Merci.
Ce n'est pas exactement ce que je souhaitais faire : si je peux
surcharger GetObjectData, cela me permet de sérialiser exactement ce
dont j'ai besoin, et non la classe elle-même.
Typiquement, en VB6, j'aurais écrit une fonction Save. Ici, je voudrais
écrire un XML avec les champs que je contrôle parfaitement au travers de
l'appel de GetObjectData.
Je ne sais pas si je peux le faire en XML, du fait même de la structure
XML.
Christian
"Patrice" <http://scribe-fr.blogspot.com/> a écrit dans le message de
news:OTAWx46mKHA.2544@TK2MSFTNGP04.phx.gbl...
Bonjour,
Cf la doc :
http://msdn.microsoft.com/fr-fr/library/szzyf24s(VS.80).aspx
Serialize fait partie d'une autre classe qui va sérialiser l'objet.
ISerializable ne fait que fournir les infos (ce qui permet de
sérialiser sous des formats divers et variés selon le serializeur
utilisé) si bsesoin est. Par exemple commencer par sérializer une
classe avec des types de base que le sérializateur va savoir gérer...
--
Patrice
"Christian Hubert-Hugoud / weabow - Xtrem7 - Groobax"
<nospam@weabow.com> a écrit dans le message de
news:%23XgasX1mKHA.4648@TK2MSFTNGP06.phx.gbl...
Je souhaite implémenter ISerializable dans une classe. J'ai cherché un
peu partout, et je n'arrive pas à accéder à Serialize lorsque
j'utilise ma classe. Voici le code de la classe (classeDeBase) :
using System.Windows.Forms;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
using System.Security.Permissions;
namespace Design_Patterns
{
[Serializable]
public class classeDeBase : ISerializable
{
protected classeDeBase(SerializationInfo info, StreamingContext
context){}
[SecurityPermissionAttribute(SecurityAction.Demand,
SerializationFormatter = true)]
void ISerializable.GetObjectData(SerializationInfo info,
StreamingContext context)
{
info.AddValue ("coucou", true );
}
}
}
Votre aide sera bienvenue (comme vous le voyez je débute en C#).
Christian
Euh c'est bien XML ? le code original semblait plutôt vouloir utiliser un
"BinaryFormatter". Je proposerai de démarrer avec :
using System;
using System.Xml.Serialization;
namespace ConsoleApplication1
{
public class Data
{
public string a;
[XmlIgnore] public string b;
public string c;
}
class Program
{
static void Main(string[] args)
{
Data data = new Data { a = "A", b = "B", c = "C" };
XmlSerializer xml = new XmlSerializer(typeof(Data));
xml.Serialize(Console.Out, data);
Console.ReadKey();
}
}
}
Ce qui donne :
<?xml version="1.0" encoding="ibm850"?>
<Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<a>A</a>
<c>C</c>
</Data>
Donc B n'est pas sérialisé. Que veut on changer à partir de ce point de
départ ?
--
Patrice
"Patrice" <http://scribe-fr.blogspot.com/> a écrit dans le message de
news:Serialize est la méthode qui effectue la sérialization. Le "n'arrive pas
à accéder à Serialize" me faisait donc penser que tu n'arrivais pas à
utiliser le sérialiseur ce qui n'est pas directement à l'implémentation
de ISerializable.
Je crois maintenant comprendre que le problème est d'ignorer un champ
auquel cas il suffit de lui appliquer un attribut NonSerialized...
Sinon expliquer plus précisemment "sérialiser exactement ce dont j'ai
besoin" (par exemple un exemple de classe avec 2/3 champs, le XML obtenu
et le changement que l'on voudrait apporter, pour l'instant je crois
comprendre qu'il s"agit juste d"ignorer un champ)
--
Patrice
"Christian Hubert-Hugoud / weabow - Xtrem7 - Groobax"
a écrit dans le message de
news:uYfw9O%Merci.
Ce n'est pas exactement ce que je souhaitais faire : si je peux
surcharger GetObjectData, cela me permet de sérialiser exactement ce
dont j'ai besoin, et non la classe elle-même.
Typiquement, en VB6, j'aurais écrit une fonction Save. Ici, je voudrais
écrire un XML avec les champs que je contrôle parfaitement au travers de
l'appel de GetObjectData.
Je ne sais pas si je peux le faire en XML, du fait même de la structure
XML.
Christian
"Patrice" <http://scribe-fr.blogspot.com/> a écrit dans le message de
news:Bonjour,
Cf la doc :
http://msdn.microsoft.com/fr-fr/library/szzyf24s(VS.80).aspx
Serialize fait partie d'une autre classe qui va sérialiser l'objet.
ISerializable ne fait que fournir les infos (ce qui permet de
sérialiser sous des formats divers et variés selon le serializeur
utilisé) si bsesoin est. Par exemple commencer par sérializer une
classe avec des types de base que le sérializateur va savoir gérer...
--
Patrice
"Christian Hubert-Hugoud / weabow - Xtrem7 - Groobax"
a écrit dans le message de
news:%Je souhaite implémenter ISerializable dans une classe. J'ai cherché un
peu partout, et je n'arrive pas à accéder à Serialize lorsque
j'utilise ma classe. Voici le code de la classe (classeDeBase) :
using System.Windows.Forms;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
using System.Security.Permissions;
namespace Design_Patterns
{
[Serializable]
public class classeDeBase : ISerializable
{
protected classeDeBase(SerializationInfo info, StreamingContext
context){}
[SecurityPermissionAttribute(SecurityAction.Demand,
SerializationFormatter = true)]
void ISerializable.GetObjectData(SerializationInfo info,
StreamingContext context)
{
info.AddValue ("coucou", true );
}
}
}
Votre aide sera bienvenue (comme vous le voyez je débute en C#).
Christian
> En fait, l'avantage lorsque la sérialisation appelle GetObjectData, c'est
que cette fonction fournit exactement ce qu'il faut enregistrer dans le
fichier, qui n'aura a-priori pas grand chose à voir avec la classe
(l'objet en fait) elle-même, et encore moins avec ses membres.
> En fait, l'avantage lorsque la sérialisation appelle GetObjectData, c'est
que cette fonction fournit exactement ce qu'il faut enregistrer dans le
fichier, qui n'aura a-priori pas grand chose à voir avec la classe
(l'objet en fait) elle-même, et encore moins avec ses membres.
> En fait, l'avantage lorsque la sérialisation appelle GetObjectData, c'est
que cette fonction fournit exactement ce qu'il faut enregistrer dans le
fichier, qui n'aura a-priori pas grand chose à voir avec la classe
(l'objet en fait) elle-même, et encore moins avec ses membres.
En fait, l'avantage lorsque la sérialisation appelle GetObjectData, c'est
que cette fonction fournit exactement ce qu'il faut enregistrer dans le
fichier, qui n'aura a-priori pas grand chose à voir avec la classe
(l'objet en fait) elle-même, et encore moins avec ses membres.
Normalement la sérialisation a pour but de pouvoir sauver un objet pour
ensuite le restaurer dans le même état. Eventuellement il est possible de
prendre le contrôle (par exemple pour sauver une image qui appartiendrait
à l'objet dans un format particulier ou pouvoir sauver un objet dans une
version et le restaurer vers une version ultérieure en prenant en compte
les différences, prendre en charge des hiérarchies complexes etc...)
Pour l'instant ce que tu décris évoque pour moi plutôt tout simplement un
fichier c'est-à-dire un objet qui permet de lire ou d'écrire des données
qui n'ont absolument rien à voir avec l'objet lui-même. Voir peut-être les
flux http://msdn.microsoft.com/fr-fr/library/system.io.stream(VS.80).aspx
?
Par exemple une application comme un traitement de texte va sans doute
avoir une fonction de sauvegarde explicite qui sauvera les données
actuellement gérées sous un format bien précis n'ayant sans doute rien à
voir avec la structure des classes de l'application. Utiliser la
sérialisation serait sans doute une erreur de perspective (on veut sauver
un document utilisateur, pas un objet pour programmeurs).
--
Patrice
En fait, l'avantage lorsque la sérialisation appelle GetObjectData, c'est
que cette fonction fournit exactement ce qu'il faut enregistrer dans le
fichier, qui n'aura a-priori pas grand chose à voir avec la classe
(l'objet en fait) elle-même, et encore moins avec ses membres.
Normalement la sérialisation a pour but de pouvoir sauver un objet pour
ensuite le restaurer dans le même état. Eventuellement il est possible de
prendre le contrôle (par exemple pour sauver une image qui appartiendrait
à l'objet dans un format particulier ou pouvoir sauver un objet dans une
version et le restaurer vers une version ultérieure en prenant en compte
les différences, prendre en charge des hiérarchies complexes etc...)
Pour l'instant ce que tu décris évoque pour moi plutôt tout simplement un
fichier c'est-à-dire un objet qui permet de lire ou d'écrire des données
qui n'ont absolument rien à voir avec l'objet lui-même. Voir peut-être les
flux http://msdn.microsoft.com/fr-fr/library/system.io.stream(VS.80).aspx
?
Par exemple une application comme un traitement de texte va sans doute
avoir une fonction de sauvegarde explicite qui sauvera les données
actuellement gérées sous un format bien précis n'ayant sans doute rien à
voir avec la structure des classes de l'application. Utiliser la
sérialisation serait sans doute une erreur de perspective (on veut sauver
un document utilisateur, pas un objet pour programmeurs).
--
Patrice
En fait, l'avantage lorsque la sérialisation appelle GetObjectData, c'est
que cette fonction fournit exactement ce qu'il faut enregistrer dans le
fichier, qui n'aura a-priori pas grand chose à voir avec la classe
(l'objet en fait) elle-même, et encore moins avec ses membres.
Normalement la sérialisation a pour but de pouvoir sauver un objet pour
ensuite le restaurer dans le même état. Eventuellement il est possible de
prendre le contrôle (par exemple pour sauver une image qui appartiendrait
à l'objet dans un format particulier ou pouvoir sauver un objet dans une
version et le restaurer vers une version ultérieure en prenant en compte
les différences, prendre en charge des hiérarchies complexes etc...)
Pour l'instant ce que tu décris évoque pour moi plutôt tout simplement un
fichier c'est-à-dire un objet qui permet de lire ou d'écrire des données
qui n'ont absolument rien à voir avec l'objet lui-même. Voir peut-être les
flux http://msdn.microsoft.com/fr-fr/library/system.io.stream(VS.80).aspx
?
Par exemple une application comme un traitement de texte va sans doute
avoir une fonction de sauvegarde explicite qui sauvera les données
actuellement gérées sous un format bien précis n'ayant sans doute rien à
voir avec la structure des classes de l'application. Utiliser la
sérialisation serait sans doute une erreur de perspective (on veut sauver
un document utilisateur, pas un objet pour programmeurs).
--
Patrice