Convertir n'importe quel objet à un byte[]

Je suis en train d'écrire un prototype de connexion TCP et je vais avoir quelques difficultés à homogénéiser les données à envoyer.

En ce moment, je suis l'envoi de rien, mais les cordes, mais dans l'avenir, nous voulons être en mesure d'envoyer n'importe quel objet.

Le code est assez simple pour le moment, parce que je pensais que tout ce qui pourrait être jeté dans un tableau d'octets:

void SendData(object headerObject, object bodyObject)
{
  byte[] header = (byte[])headerObject;  //strings at runtime, 
  byte[] body = (byte[])bodyObject;      //invalid cast exception

  //Unable to cast object of type 'System.String' to type 'System.Byte[]'.
  ...
}

Bien sûr, cela se trouve assez facilement résolu avec un

if( state.headerObject is System.String ){...}

Le problème est que si je le fais de cette façon, j'ai besoin de vérifier, pour CHAQUE type d'objet qui ne peut pas être lancée à un byte[] au moment de l'exécution.

Depuis je ne sais pas tous les objets qui ne peuvent pas être jeté dans un byte[] au moment de l'exécution, ce n'est vraiment pas une option.

Comment convertir n'importe quel objet dans un tableau d'octets en C# .NET 4.0?

  • Ce n'est pas possible de manière significative, en général (prenons, par exemple, une instance de FileStream, ou n'importe quel objet qui encapsule une poignée comme ça).
  • Avez-vous l'intention d'avoir tous les clients en cours d'exécution .NET? Si la réponse est non, vous devriez envisager une autre forme de sérialisation (XML, JSON, ou les goûts)
InformationsquelleAutor Steve H. | 2011-02-01