From 00f030887b6eb6ce25de35ac4690f7ef00e4ebe0 Mon Sep 17 00:00:00 2001 From: Loris OBRY Date: Wed, 24 May 2023 15:21:17 +0200 Subject: [PATCH 1/3] DataContractSerializer --- Sources/Model/Carte.cs | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/Sources/Model/Carte.cs b/Sources/Model/Carte.cs index 9479b48..951a5db 100644 --- a/Sources/Model/Carte.cs +++ b/Sources/Model/Carte.cs @@ -6,9 +6,12 @@ using System.Text; using System.Threading.Tasks; using System.ComponentModel; using System.Runtime.CompilerServices; +using System.Net.Http.Headers; +using System.Runtime.Serialization; namespace Model { + [DataContract(Name = "carte")] public class Carte : INotifyPropertyChanged { public event PropertyChangedEventHandler? PropertyChanged; @@ -17,8 +20,11 @@ namespace Model PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } + [DataMember] private readonly string nom; + [DataMember] public string Nom => nom; + [DataMember] public string Description { get => description; set { @@ -27,6 +33,7 @@ namespace Model } } private string description; + [DataMember] public string Pouvoir { get => pouvoir; set @@ -36,6 +43,7 @@ namespace Model } } private string pouvoir; + [DataMember] public string Strategie { get => strategie; @@ -46,7 +54,7 @@ namespace Model } } private string strategie; - private int? note; + [DataMember] public int? Note { get @@ -63,6 +71,8 @@ namespace Model OnPropertyChanged(nameof(Note)); } } + private int? note; + [DataMember] public string LienImage { get => lienImage; @@ -83,5 +93,21 @@ namespace Model this.note = note; this.lienImage = LienImage; } + + public override int GetHashCode() + => Nom.GetHashCode(); + + public override bool Equals(object right) + { + if (object.ReferenceEquals(right, null)) return false; + if (object.ReferenceEquals(right, this)) return true; + if (this.GetType() != right.GetType()) return false; + return this.Equals(right); + } + + public bool Equals(Carte other) + { + return (this.nom == other.nom); + } } } From 5b285829d1560860e40bd74c34df301f23bd152c Mon Sep 17 00:00:00 2001 From: Loris OBRY Date: Wed, 24 May 2023 19:23:55 +0200 Subject: [PATCH 2/3] Ajout de la persistance pour la carte villageois dans ConsoleApp --- Sources/ConsoleApp/ConsoleApp.csproj | 4 +++ Sources/ConsoleApp/FileName.cs | 30 ++++++++----------- Sources/ConsoleApp/Persistance/villageois.xml | 1 + Sources/MauiApp1/MauiApp1.csproj | 4 +++ Sources/Model/Carte.cs | 17 +++++++---- 5 files changed, 33 insertions(+), 23 deletions(-) create mode 100644 Sources/ConsoleApp/Persistance/villageois.xml diff --git a/Sources/ConsoleApp/ConsoleApp.csproj b/Sources/ConsoleApp/ConsoleApp.csproj index 6abd0f7..3cb633d 100644 --- a/Sources/ConsoleApp/ConsoleApp.csproj +++ b/Sources/ConsoleApp/ConsoleApp.csproj @@ -11,4 +11,8 @@ + + + + diff --git a/Sources/ConsoleApp/FileName.cs b/Sources/ConsoleApp/FileName.cs index 3ab4062..5fb1cc3 100644 --- a/Sources/ConsoleApp/FileName.cs +++ b/Sources/ConsoleApp/FileName.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; +using System.Runtime.Serialization; using System.Text; using System.Threading.Tasks; using System.Xml.Schema; @@ -10,31 +11,26 @@ using static System.Console; namespace ConsoleApp { - internal class FileName + class Program { static void Main(string[] args) { - /* int a = 0; + Carte villageois = new Carte("Villageois", "Il peut seulement voter", "Il doit se concentrer sur les autres joueurs", 2, "villageois", "La carte de base"); - int[] tab = new int[3] { 1, 2, 3 }; - int[] tab2 = new int[tab.Length]; - tab.CopyTo(tab2, 0); - tab2[1] = 0; - DisplayTab("Tableau 1 :", tab); - DisplayTab("Tableau 2 :", tab2); - */ + Carte loup_garou = new Carte("Loup-Garou", "Il peut se reveiller chaque nuit pour voter avec les autres de son clan qui ils vont manger", "Il doit se faire passer pour un role du village, voter pour un de ses compagnons pour gagner la confiance peut etre un moyen", 4, "loup-garou", "Le loup-garou est un rôle très appréciable à jouer"); - Carte C = new Carte("Villageois", "Aucuns", "Doit voter inteligemment", null, "lien", "une carte peu apprécié mais necesaire"); + Carte voyante = new Carte("Voyante", "La voyante est capable de voir le role d'un joueur, et ce, chaque nuit", "Elle ne doit pas se faire découvrir, surtout en debut de partie, donner des indices subtiles sans braquer tout les soupçons des loup-garou vers vous est l'objectif", 4, "villageois", "Une carte tres interessante et difficile a la fois, ce role emmene souvent à faire des sacrifices"); - } - static void DisplayTab(string name, int[] tab) - { - Console.Write($"{name} "); - foreach (int i in tab) + string relativePath = "..\\..\\..\\Persistance"; + + string xmlFile = Path.Combine(relativePath, "villageois.xml"); + + var serializer = new DataContractSerializer(typeof(Carte)); + + using (Stream s = File.Create(xmlFile)) { - Console.Write($"{i} "); + serializer.WriteObject(s, villageois); } - Console.WriteLine(); } } } diff --git a/Sources/ConsoleApp/Persistance/villageois.xml b/Sources/ConsoleApp/Persistance/villageois.xml new file mode 100644 index 0000000..74dea1a --- /dev/null +++ b/Sources/ConsoleApp/Persistance/villageois.xml @@ -0,0 +1 @@ +La carte de basevillageoisVillageois2Il peut seulement voterIl doit se concentrer sur les autres joueurs \ No newline at end of file diff --git a/Sources/MauiApp1/MauiApp1.csproj b/Sources/MauiApp1/MauiApp1.csproj index 50dd9d6..b68b602 100644 --- a/Sources/MauiApp1/MauiApp1.csproj +++ b/Sources/MauiApp1/MauiApp1.csproj @@ -55,4 +55,8 @@ + + + + diff --git a/Sources/Model/Carte.cs b/Sources/Model/Carte.cs index 951a5db..eb29c17 100644 --- a/Sources/Model/Carte.cs +++ b/Sources/Model/Carte.cs @@ -21,9 +21,14 @@ namespace Model } [DataMember] - private readonly string nom; - [DataMember] - public string Nom => nom; + public string Nom { + get => nom; + set { + nom = value; + OnPropertyChanged(nom); + } + } + private string nom; [DataMember] public string Description { get => description; @@ -78,7 +83,7 @@ namespace Model get => lienImage; set { - if (!string.IsNullOrEmpty(lienImage)) lienImage = "notfound"; + if (string.IsNullOrEmpty(value)) lienImage = "notfound"; else lienImage = value; OnPropertyChanged(nameof(LienImage)); } @@ -91,7 +96,7 @@ namespace Model this.pouvoir = pouvoir; this.strategie = strategie; this.note = note; - this.lienImage = LienImage; + this.lienImage = lienImage; } public override int GetHashCode() @@ -102,7 +107,7 @@ namespace Model if (object.ReferenceEquals(right, null)) return false; if (object.ReferenceEquals(right, this)) return true; if (this.GetType() != right.GetType()) return false; - return this.Equals(right); + return this.Equals(right as Carte); } public bool Equals(Carte other) From 90e0b5f21112eb9b99e0ee3ba8fa1dc88fa47812 Mon Sep 17 00:00:00 2001 From: Loris OBRY Date: Wed, 24 May 2023 19:30:38 +0200 Subject: [PATCH 3/3] Serialisation mais cette fois il y a l'indentation --- Sources/ConsoleApp/FileName.cs | 12 ++++++++---- Sources/ConsoleApp/Persistance/villageois.xml | 10 +++++++++- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/Sources/ConsoleApp/FileName.cs b/Sources/ConsoleApp/FileName.cs index 5fb1cc3..154ab78 100644 --- a/Sources/ConsoleApp/FileName.cs +++ b/Sources/ConsoleApp/FileName.cs @@ -8,6 +8,8 @@ using System.Text; using System.Threading.Tasks; using System.Xml.Schema; using static System.Console; +using System.Runtime.Serialization.Json; +using System.Xml; namespace ConsoleApp { @@ -24,12 +26,14 @@ namespace ConsoleApp string relativePath = "..\\..\\..\\Persistance"; string xmlFile = Path.Combine(relativePath, "villageois.xml"); - + XmlWriterSettings settings = new XmlWriterSettings() { Indent = true }; var serializer = new DataContractSerializer(typeof(Carte)); - - using (Stream s = File.Create(xmlFile)) + using (TextWriter tw = File.CreateText(xmlFile)) { - serializer.WriteObject(s, villageois); + using (XmlWriter writer = XmlWriter.Create(tw, settings)) + { + serializer.WriteObject(writer, villageois); + } } } } diff --git a/Sources/ConsoleApp/Persistance/villageois.xml b/Sources/ConsoleApp/Persistance/villageois.xml index 74dea1a..cc3218f 100644 --- a/Sources/ConsoleApp/Persistance/villageois.xml +++ b/Sources/ConsoleApp/Persistance/villageois.xml @@ -1 +1,9 @@ -La carte de basevillageoisVillageois2Il peut seulement voterIl doit se concentrer sur les autres joueurs \ No newline at end of file + + + La carte de base + villageois + Villageois + 2 + Il peut seulement voter + Il doit se concentrer sur les autres joueurs + \ No newline at end of file