Je suis coincé dans ce problème et j'ai cherché partout des réponses mais je n'ai pas trouvé quelque chose qui corresponde à mon problème. Je veux sérialiser objet et l'enregistrer dans un fichier binaire, et deserialize
comme liste car il va retourner plusieurs lignes d'enregistrements.Sérialiser un objet puis le désérialiser en tant que liste <object> C#
Alors, voici ma classe
[Serializable]
public class DTOMultiConfig
{
public string Key { get; set; }
public string KeyValue { get; set; }
}
[Serializable]
public class DTOMultiConfigs : List<DTOMultiConfig>
{
public void Dispose()
{
}
}
et je suis en utilisant ces méthodes que j'ai trouvé en ligne. Voilà comment je sérialiser mon objet, cette partie fonctionne
public void Editor_Config(DTOMultiConfig dto)
{
if (dto.ID == 0)//new
{
dto.ID = 0;
WriteToBinaryFile(BinPath, dto, true);
}
else//edit
{
}
}
public static void WriteToBinaryFile<T>(string filePath, T objectToWrite, bool append = false)
{
using (Stream stream = System.IO.File.Open(filePath, append ? FileMode.Append : FileMode.Create))
{
var binaryFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
binaryFormatter.Serialize(stream, objectToWrite);
}
}
Voici comment j'utilise la méthode deserialize
, je ne suis pas sûr, je suis sûr que je suis en train de faire dans le mauvais sens parce qu'il ne fonctionne pas à tout. Le ReadFromBinaryFile
cesse de fonctionner juste avant l'instruction 'return'.
public PartialViewResult ShowListOfConfigs()
{
List<DTOMultiConfig> dto = new List<DTOMultiConfig>();
//DESERIALIZE
dto = ReadFromBinaryFile<List<DTOMultiConfig>>(BinPath);
return PartialView("_ListOfConfigs", dto);
}
public static T ReadFromBinaryFile<T>(string filePath)
{
using (Stream stream = System.IO.File.Open(filePath, FileMode.Open))
{
var binaryFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
return (T)binaryFormatter.Deserialize(stream);
}
}
Toutes les réponses avec quelques explications seront appréciées.
Quelle est l'exception que vous obtenez? Je suppose que votre problème est que vous écrivez une seule instance de DTOMultiConfig mais essayez de lire une liste qui ne peut pas fonctionner car la représentation binaire d'une seule instance de votre type est différente de la représentation binaire d'une liste. –
dnickless
Bonjour, merci pour la réponse, je reçois cette exeption {"Impossible de lancer l'objet de type 'MVCHowTo.Models.DTOMultiConfig' pour taper 'System.Collections.Generic.List'1 [MVCHowTo.Models.DTOMultiConfig]'. "} –
alors, est-ce que je devrais faire une liste de dtoMultiConfig quand j'écris aussi dans un fichier binaire? Parce que j'écris avec seulement 1 enregistrement à la fois, –