2010-10-25 10 views
0

J'ai écrit ces méthodes de classe pour .net 2.0 pour créer des objets à partir de chaînes séparées par des chaînes | '' et inversement. Mais le problème est qu'ils ne donnent pas de bons résultats dans le cas de types Inherted, c'est-à-dire que les propriétés héritées arrivent en dernier et que la séquence des données fournies sous la forme d'une chaîne séparée ne fonctionne pas.Générique Objet à sérialisation de chaîne séparée par '|'

Par exemple:

class A 
{ 
    int ID; 
} 

class B : A 
{ 
    string Name; 
} 

la chaîne est "1 | John". les méthodes lisent sous le nom == 1 et ID == "John".

Dites-moi comment faire.

public class ObjectConverter<T> 
    { 
     public static T TextToObject(string text) 
     { 
      T obj = Activator.CreateInstance<T>(); 
      string[] data = text.Split('|'); 
      PropertyInfo[] props = typeof(T).GetProperties(); 
      int objectPropertiesLength = props.Length;    

      int i = 0; 

      if (data.Length == objectPropertiesLength) 
      { 
       for (i = 0; i < objectPropertiesLength; i++) 
       { 
        props[i].SetValue(obj, data[i], null); 
       } 
      } 

      return obj; 
     } 

     public static string ObjectToText(T obj) 
     { 
      StringBuilder sb = new StringBuilder(); 

      Type t = typeof(T); 

      PropertyInfo[] props = t.GetProperties(); 

      int i = 0; 
      foreach (PropertyInfo pi in props) 
      { 
       object obj2 = props[i++].GetValue(obj, null); 

       sb.Append(obj2.ToString() + "|"); 
      } 

      sb = sb.Remove(sb.Length - 1, 1); 

      return sb.ToString(); 
     } 
    } 

Répondre

2
  • Je ne pense pas que le temps d'exécution vous assure que lorsque vous appelez GetProperties les objets d'information de la propriété sera toujours dans le même ordre. Vous devrez faire quelque chose comme obtenir la liste des noms de propriétés les trier et utiliser le même tri pour la sérialisation et la désérialisation.

  • Il y a au moins 3 façons d'objet sérialiser construit en .net est-il une raison pour laquelle vous n'utilisez pas un de ceux