J'ai un seul fichier et j'ai besoin de sérialiser plusieurs objets de la même classe quand un nouvel objet est créé. Je ne peux pas les stocker dans des tableaux car j'ai besoin de les sérialiser l'instance qu'un objet est créé. Aidez-moi, s'il vous plaît.J'ai un fichier unique et besoin de sérialiser plusieurs objets au hasard. Comment puis-je en C#?
Répondre
Voir la réponse here.
En bref, juste sérialiser tout dans le même flux de fichiers, puis désérialiser. dotNet connaîtrait la taille de chaque objet
Quel mécanisme de sérialisation utilisez-vous? XmlSerializer
peut être un problème à cause du nœud racine et des choses comme les déclarations d'espace de noms, ce qui est un peu difficile à obtenir - plus ce n'est pas génial pour les désérialisations partielles. BinaryFormatter
est très fragile pour commencer - je ne le recommande pas dans la plupart des cas. Une option peut être protobuf-net; Il s'agit d'un sérialiseur binaire (utilisant le format «tampons de protocole» de Google - efficace, portable et tolérant à la version). Vous pouvez sérialiser plusieurs objets dans un flux avec Serializer.SerializeWithLengthPrefix
. Pour désérialiser les mêmes éléments, Serializer.DeserializeItems
renvoie un IEnumerable<T>
des articles désérialisés - ou vous pouvez facilement faire TryDeserializeWithLengthPrefix
public (il est actuellement privé, mais la source est disponible).
Il suffit d'écrire chaque objet dans un fichier après l'avoir créé - travail terminé.
Si vous voulez un exemple, veuillez dire - bien que l'unité teste here donne un aperçu.
Il serait essentiellement quelque chose comme (non testé):
using(Stream s = File.Create(path))
{
Serializer.SerializeWithLengthPrefix(s, command1, PrefixStyle.Base128, 0);
... your code etc
Serializer.SerializeWithLengthPrefix(s, commandN, PrefixStyle.Base128, 0);
}
...
using(Stream s = File.OpenRead(path)) {
foreach(Command command in
Serializer.DeserializeItems<Command>(s, PrefixStyle.Base128, 0))
{
... do something with command
}
}
Je sais que je suis en retard pour la fête, mais ça ne vous dérange pas d'élaborer * BinaryFormatter est très fragile pour commencer - je ne le recommande pas dans la plupart des cas. * Pourquoi est-il fragile? Pourquoi vous ne le recommande pas? Cela fait un moment que cette réponse peut-être vous pouvez recommander une autre façon de sérialiser plusieurs objets dans un seul fichier/fichier multiple? –
@mehow sure: BinaryFormatter est très intolérant à la version/refactor: il est très facile de faire en sorte qu'il ne puisse pas désérialiser les fichiers existants en changeant ... eh bien, quoi que ce soit franchement. Il dépend également du framework et de la plate-forme, limitant les options. Il est également inutilement gonflé et inefficace, et a un certain nombre de "getchas". Quant à votre autre question: je suis partial, mais je dirais que protobuf-net répond à toutes ces questions. C'était, après tout, l'objectif de conception :) protobuf-net est parfaitement satisfait de plusieurs objets dans un flux, tant que les méthodes * WithLengthPrefix sont utilisées. –
Merci j'apprécie –
Pour chaque objet qui arrive, nous convertirons en une chaîne Base64Encoded et le stocker sous forme d'une ligne dans un fichier texte. Ainsi, dans ce fichier, chaque ligne aura un objet sérialisé par ligne. Pendant la lecture, nous lirons le fichier une ligne à la fois et désérialiserons cette chaîne codée Base64 dans notre objet. Facile .. donc essayons le code.
http://www.codeproject.com/KB/cs/serializedeserialize.aspx?display=Print
- 1. minutes au hasard en C# 2.0
- 2. Comment sérialiser un objet en C# et éviter les manipulations?
- 3. WCF recommande des approches pour sérialiser plusieurs objets
- 4. Comment sérialiser un objet dans un fichier à l'aide de NSKeyedArchiver au format NSPropertyListXMLFormat_v1_0?
- 5. mysql valeur générée au hasard
- 6. Comment écrire plusieurs zones de texte dans un fichier txt généré en programme en C#?
- 7. Beaucoup à plusieurs objets relationnels en C#
- 8. Comment ajouter des liens vers un texte au format HTML? (au hasard, en utilisant le programme)
- 9. Comment désérialiser plusieurs objets présents dans un seul fichier sérialisé dans C#?
- 10. concombre + sélénium échoue au hasard
- 11. jQuery au hasard fadeIn images
- 12. Id de session changeant au hasard
- 13. Sérialiser une structure en C# vers C++ et vice versa
- 14. Comment configurer un tableau unique ou un dictionnaire pour une utilisation dans plusieurs sources de données?
- 15. Écrire au fichier binaire en C++ et C#
- 16. Link (? Au hasard) échoue avec DLL de débogage de Visual
- 17. Objets et surcharge d'opérateur C++
- 18. Le script de mise à jour s'arrête au hasard
- 19. Exécution de JAI dans OSGi
- 20. Combinaison de plusieurs fichiers dans une archive unique (Silverlight/C#)
- 21. Importer un fichier texte au format bizarre en C#
- 22. Sérialiser les objets de base de données MS Access vers le (s) fichier (s) texte
- 23. Exposition de plusieurs objets avec RMI au printemps
- 24. Comment choisir au hasard des éléments d'un tableau?
- 25. Identificateur unique commutable en C#
- 26. Pourquoi les tweens s'arrêtent-ils au hasard?
- 27. Comment sérialiser un objet COM dans .Net?
- 28. numéros choisis au hasard dans la base de données
- 29. Comment restaurer un fichier en utilisant C#?
- 30. comment sérialiser et désérialiser le membre statique
Que voulez-vous dire par hasard? –
Je pense que vous devez clarifier votre anglais. –
Enregistrez-vous les objets dans ce "fichier unique" et récupérez-les à nouveau? Quand vous dites que vous voulez "sérialiser" les objets dès qu'ils sont créés, voulez-vous dire que vous voulez les sauvegarder dans ce seul fichier? – DOK