-
אני לומדת שנה שנייה במדעי המחשב ועושה פרוייקט בWPF ונקלתי בבעיה אני מוציאה מהקובץ נתונים בצורה הבאה וכשאני מגיעה למאפיין כתובת שעשיתי אותו class עיר רחוב ומספר בניין הוא לא נותן. איך אפשר לעשות את זה ? תודה מראש!!
foreach (PropertyInfo item in typeof(BE.Tester).GetProperties()) { TypeConverter typeConverter = TypeDescriptor.GetConverter(item.PropertyType); object convertValue = typeConverter.ConvertFromString(element.Element(item.Name).Value); item.SetValue(tester, convertValue); }
-
XElement testerRoot; string testerPath = @"testerXml.xml"; XElement traineeRoot; string traineePath = @"traineeXml.xml"; XElement testRoot; string testPath = @"testXml.xml"; XElement configRoot; string configPath = @"configXml.xml"; private static int testNum = 0; testerRoot = new XElement("testers"); testerRoot.Save(testerPath); traineeRoot = new XElement("trainees"); traineeRoot.Save(traineePath); testRoot = new XElement("tests"); testRoot.Save(testPath); configRoot = new XElement("TestNum"); configRoot.Add(new XElement("TestNum", testNum)); configRoot.Save(configPath); if (predicat == null) { return from item in testerRoot.Elements() select ConvertTester(item); } return from item in testerRoot.Elements() let s = ConvertTester(item) where predicat(s) select s; foreach (PropertyInfo item in typeof(BE.Tester).GetProperties()) { if (item.Name != "Adress") TesterElement.Add(new XElement(item.Name, item.GetValue(tester, null))); else { XElement city = new XElement("city", tester.TesterAdress.City); XElement street = new XElement("street", tester.TesterAdress.Street); XElement BuildingNum = new XElement("buildingNum", tester.TesterAdress.BuildingNum); XElement address = new XElement("Adress",street,BuildingNum,city); TesterElement.Add(address); }
זה בערך חלק מהקוד רק של הטסטר
-
הבנתי.
אי אפשר להכניס את הכתובת באוטומציה של מיפוי אוטומטי של שמות, צריך לטפל בה ידנית:var adress = new TesterAdressType(); //TesterAdressType replace with type of address... var el = element.Element("Adress"); adress.City = (string)el.Element("city").Value; adress.Street = (string)el.Element("street").Value; adress.BuildingNum = (string)el.Element("buildingNum").Value; //is string? tester.TesterAdress = adress; foreach (PropertyInfo item in typeof(BE.Tester).GetProperties()) { if(item.Name == "TesterAdress") continue; TypeConverter typeConverter = TypeDescriptor.GetConverter(item.PropertyType); object convertValue = typeConverter.ConvertFromString(element.Element(item.Name).Value); item.SetValue(tester, convertValue); }
תראי זה ממש ללימודים כי זה ממש המצאת הגלגל להתחיל מפות XML ידנית לאובייקטים, יש בשביל זה מחלקות כמו הסריאלזציה המובנית בשפה.
וגם אם לא היה בשפה הדרך הזו היא לא "ברת תחזוקה" באופן מאוד בולט, כל שינוי הכי קטן יקריס כמגדל קלפים את כל הפרוצדורה ומאוד קשה לתקן ולדבאג. טוב אולי את זה בעצמו לומדים ככה... -
הוא רושם הפנייה לאובייקט לא הוגדרה למופע של אובייקט כשאני מגיעה לשורה adress.City = (string)el.Element("city").Value;
-
@edenbelosh ובטוח הXML אליו את פונה נוצר על ידי הקוד שלך?
-
כשאני עושה את הכתובת בהערה הוא שומר והכל בסדר רק כשמגיע לכתובת הוא רושם הפנייה לאובייקט לא הוגדרה אולי בגלל הvar
-