2011-08-27 3 views
0

J'ai la méthode suivante pour sérialiser une liste des classes sur le disque:La meilleure façon de sérialiser une liste d'entités en C#

private static void Serialize(List<CcmAlarmUalUsl> entityList) 
{ 
    try 
    { 
     using (Stream stream = File.Open("CcmAlarmUalUsl.dat", FileMode.Create)) 
     { 
      BinaryFormatter bin = new BinaryFormatter(); 
      bin.Serialize(stream, entityList); 
     } 
    } 
    catch (IOException) 
    { 
    } 
} 

La classe d'entité Je veux sérialisation ressemble à ceci:

public class CcmAlarmUalUsl 
{ 
    public string SubId { get; set; } 

    public System.DateTime TimeOfAlarm { get; set; } 

    public int AlarmType { get; set; } 
} 

Ma classe Serialize est-elle le meilleur moyen de sérialiser la liste des entités sur le disque? Cela n'a pas besoin d'être lisible par l'homme. Il doit être utilisé strictement par l'application, en tant que moyen de stockage pour un cache interne. Aucun stockage de base de données n'est nécessaire.

Je suis également un peu préoccupé par le moment où il est temps de modifier la structure de CcmAlarmUalUsl. Je pourrais ajouter des propriétés à la fin de la classe. Comment cela affectera-t-il les éléments en cache existants?

+0

Qu'est-ce que 'lizards1'? Vouliez-vous dire que ce soit 'entityList'? –

+0

Quelle est votre exigence pour les données sérialisées? Si votre exigence est que les données sérialisées sont lisibles par un humain, alors BinaryFormatter n'est pas la meilleure solution, XmlSerializer pourrait être une meilleure option. Votre code n'est pas très clair, vous sérialisez une variable appelée 'lizards1 'mais la fonction prend enityList, est-ce la entityList que vous voulez sérialiser? –

+0

Désolé - lizards1 était une faute de frappe. – Hosea146

Répondre

1

Réponse simple - non. Votre code ne compilera pas (lizards1 ??) et votre classe CcmAlarmUalUs1 n'est pas marquée comme sérialisable (erreur d'exécution). Marquez votre classe CcmAlarmUrlUs1 comme sérialisable, changez lizards1 en entityList et cela devrait fonctionner et il semble que vous fassiez bien les choses.

Votre question est un peu vague, cependant. Par «meilleur», qu'est-ce que vous cherchez? Sans le savoir, il est difficile de vraiment donner une bonne réponse.

+0

Merci. 'Lizards1' était une faute de frappe. Cela n'a pas besoin d'être lisible par l'homme. Il s'agit strictement d'un mécanisme de stockage d'application pour stocker une liste d'éléments mis en cache. Cela n'a pas besoin d'être persisté dans une base de données. J'ai mis à jour mon message pour inclure une autre exigence. – Hosea146

2

La meilleure façon dépend des exigences de votre application. La sérialisation binaire (standart one) est habituellement bon marché en termes de mémoire utilisée sur le disque dur, mais pas très évolutive, car une fois que vous refactorez votre code, vous devrez faire face à un problème de désarchivage des binaires précédemment sauvegardés. Ce qui est possible de résoudre mais personnellement je n'aime pas cette approche et essaie de l'éviter autant que possible.

Tenir compte:

  1. sérialisation XML
  2. Json sérialisation
  3. Enregistrer objet à SQLite DB avec une ORM légère.
  4. sur mesure sérialisation binaire ...

-il beaucoup d'autres types là-bas, mais ceux-ci sont à mon humble avis les plus désamorcée dans ces jours-ci.

Espérons que cela aide.

+0

Je suis d'accord et ajoute que la sérialisation Json crée des données plus petites que la sérialisation XML –

Questions connexes