Actuellement, j'ai une application qui lit et écrit plusieurs propriétés d'une ou deux classes de base dans un fichier .txt en utilisant le Serializer binaire.Comment enregistrer un fichier lisible par l'homme
J'ai ouvert le fichier txt dans notepad et comme il est formaté pour l'application, il est pas très lisible à l'œil humain, pas pour moi en tout cas = D
J'ai entendu d'utiliser XML, mais assez la plupart de mes recherches semblent trop compliquées.
Le type de données que j'essaie de sauvegarder est simplement une collection de classes "Person.cs", rien de plus qu'un nom et une adresse, toutes les chaînes privées mais avec des propriétés et marquées Serializable.
Quelle serait la meilleure façon d'enregistrer réellement mes données d'une manière qui puisse être facilement lue par une personne? Il serait également plus facile d'apporter de petites modifications aux données de l'application directement dans le fichier au lieu de devoir le charger, le modifier et l'enregistrer.
Edit:
J'ai ajouté la façon actuelle je suis enregistrement et le chargement de mes données, mon _userCollection est qu'il suggère et Nuser/nMember sont un entier.
#region I/O Operations
public bool SaveData()
{
try
{
//Open the stream using the Data.txt file
using (Stream stream = File.Open("Data.txt", FileMode.Create))
{
//Create a new formatter
BinaryFormatter bin = new BinaryFormatter();
//Copy data in collection to the file specified earlier
bin.Serialize(stream, _userCollection);
bin.Serialize(stream, nMember);
bin.Serialize(stream, nUser);
//Close stream to release any resources used
stream.Close();
}
return true;
}
catch (IOException ex)
{
throw new ArgumentException(ex.ToString());
}
}
public bool LoadData()
{
//Check if file exsists, otherwise skip
if (File.Exists("Data.txt"))
{
try
{
using (Stream stream = File.Open("Data.txt", FileMode.Open))
{
BinaryFormatter bin = new BinaryFormatter();
//Copy data back into collection fields
_userCollection = (List<User>)bin.Deserialize(stream);
nMember = (int)bin.Deserialize(stream);
nUser = (int)bin.Deserialize(stream);
stream.Close();
//Sort data to ensure it is ordered correctly after being loaded
_userCollection.Sort();
return true;
}
}
catch (IOException ex)
{
throw new ArgumentException(ex.ToString());
}
}
else
{
//Console.WriteLine present for testing purposes
Console.WriteLine("\nLoad failed, Data.txt not found");
return false;
}
}
XmlSerializer a un certain nombre de limitations par rapport à BinaryFormatter ... par exemple, il ne peut pas sérialiser les données privées. DataContractSerializer est probablement un meilleur choix –
Le DataContractSerializer est amusant, mais personnellement je pense que l'utilisation de XMLSerializer est plus proche du BinaryFormatter en raison de la nature non opt-in et des mêmes attributs. –
Je pense que Thomas est plus proche de la vérité ici ... en particulier, avec le service-pack, le comportement par défaut de DCS contre un type non-attribué est très similaire à BF. Bien sûr, ni BF ni DCS non-attribué est une bonne option, pour exactement cette raison! –