Equivalent en C# pour sérialiser une structure. (Envoi par le réseau)

Equivalent en C# pour sérialiser une structure. (Envoi par le réseau) - C#/.NET managed - Programmation

Marsh Posté le 29-12-2008 à 11:16:44    

Bonjour à tous,
 
En C, il est possible d'obtenir les données bruts d'une struct et de les envoyer par le réseau, puis de faire un petit cast pour re-obtennir nos données structuré.
 
Je voudrai savoir si en C# c'est faisable aussi simplement ?
 
J'explique ce que je veux faire:
- J'ai un objet complexe qui contient une trame réseau et qui remplie une PropertyGrid (Permet de faire une trame "custom" ).
- Je voudrai sérialiser les propriétés privé de l'objet (par les enums, les arguments, les get/set innutiles utilisé pour la propertyGrid) et l'envoyer sur le réseau.
- La trame réseau reçu par le serveur serait désérialisé, puis remplirai une jolie PropertyGrid avec ce que le client à envoyé.
 
Je vous remercie.
 
Willits

Reply

Marsh Posté le 29-12-2008 à 11:16:44   

Reply

Marsh Posté le 29-12-2008 à 12:10:21    

implémente ISerializable, surtout si tu veux qu'il serialise les membres privés.  
La serialisation standard ne serialise pas les membres privés, uniquement les membres public.


---------------
quand un homme raisonne mal c'est qu'il n'a pas les données pour raisonner mieux (diderot)
Reply

Marsh Posté le 29-12-2008 à 17:46:20    

Je n'ai pas testé, mais avec ISerializable, j'ai l'impression que l'on "tag" les données et que ces tags sont placé dans le résultat binaire, je n'ai pas testé mais les quelques exemples de ISerializable que j'ai vu avaient l'air de faire ça.
 

Code :
  1. private MyStringData(SerializationInfo si, StreamingContext ctx) {
  2.         dataItemOne = si.GetString("First_Item").ToLower();
  3.         dataItemTwo = si.GetString("dataItemTwo").ToLower();
  4.     }
  5.     void ISerializable.GetObjectData(SerializationInfo info, StreamingContext ctx) {
  6.         // Fill up the SerializationInfo object with the formatted data.
  7.         info.AddValue("First_Item", dataItemOne.ToUpper());
  8.         info.AddValue("dataItemTwo", dataItemTwo.ToUpper());
  9.     }


 
Ce qui me tracasse, c'est que ces fonction me donne l'impression d'ajouter des "tags" aux données en binaires. (Puisqu'on les récupères avec GetString).
 
Ce que je veux c'est exactement le même comportement qu'une struct en C. (En fait, je doit envoyer les données à un soft écrit en C).
 
Cordialement,
 
Willits

Reply

Marsh Posté le 29-12-2008 à 18:13:44    

le problème, c'est que la façon de serialiser en C dépend parfois d'un compilateur à un autre, et parfois d'une version à l'autre, cela peut être différent.  
 
Honnêtement, je pense pas que tu arriveras à faire communiquer la serialization des deux languages.  
Pour interopérer entre les languages, il existe des moyens beaucoup plus sûre et simple pour le faire.
 
Comme tu passes par le réseau, démerde toi pour faire communiquer les deux languages entre eux en passant par la couche TCP.  
 
Tu as la mains des deux cotés, tu devrais pouvoir t'en sortir.
sinon essaye éventuellement de rédéfinir la même structure en .NET, et essaye de voir si le casting passe à la récupération de la trame réseau.


Message édité par moi23372 le 29-12-2008 à 18:15:52

---------------
quand un homme raisonne mal c'est qu'il n'a pas les données pour raisonner mieux (diderot)
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed