Just a Ordinary Programmer
Pharse Object to XML String | เปลี่ยน Object ไปเป็น XML ดีกว่า
เคยไหมที่แบบว่าอยากจะเก็บ Object สักตัว ลง Database แล้วเดี๋ยวค่อยเรียกมาใช้ทีหลัง
เมื่อก่อนผมก็ อ้อ Object นี้มี กี่ Attributes ก็ยัดลง database ตาม field นั้น ๆ
จะเก็บกัน 3 Object ก็สร้าง 3 Table เขียน 6 method (แปลงลง database แล้วก็ แปลงกลับมาใช้อีก) เฮ้อ เหนื่อยว่ะ
จนมาเจอวิธีนี้ ผมเขียน class มี static method ไว้ใช้เลย ใช้ได้กับทุก object เก็บลง field เดียวเป็น xml string โอ้ว แหล่มเลย
ลองดู code นะครับ
(ส่วนนี้ ผมไม่ comment นะคับ comment แล้วรู้สึกว่าจะยาว แต่ถ้าสงสัยก็ ถามไว้เดี๋ยวมาตอบคับ)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | using System; using System.Xml; using System.Xml.Serialization; using System.IO; public class ObjectPharsing{ public static string ToXml(Object obj) { if (obj==null) throw new Exception("The object is not initialzed"); StreamWriter writer = null; XmlSerializer serializer = null; string result = null; try { MemoryStream mem = new MemoryStream(); writer = new StreamWriter(mem); serializer = new XmlSerializer(obj.GetType()); serializer.Serialize(writer, obj); byte[] data = mem.ToArray(); result = System.Text.Encoding.UTF8.GetString(data); } catch (Exception ex) { throw new Exception(ex.Message, ex); } finally { if (writer != null) writer.Close(); } return result; } public static object ToObject(string xml, Type type) { byte[] data = System.Text.Encoding.Default.GetBytes(xml); MemoryStream mem = new MemoryStream(data); StreamReader reader = null; XmlSerializer serializer = null; object obj = null; try { reader = new StreamReader(mem); serializer = new XmlSerializer(type); obj = System.Convert.ChangeType(serializer.Deserialize(reader), type); } catch (Exception ex) { throw new Exception(ex.Message + "\r\n" + ex.StackTrace, ex); } finally { reader.Close(); } return obj; } } |
เวลาจะใช้ก็
1 2 3 4 5 6 7 8 9 10 11 12 13 | //...blah blah blah MyClass mc = new MyClass(); mc.attribute1 = "Init. Value"; mc.attribute2 = 20; //... blah blah blah จะกำหนดค่าอะไรก็กำหนดไป ทำอะไรก็ทำไป //แล้วก็ค่อยมาแปลงเป็น xml string string mcXml = ObjectPharsing.ToXml(); //คราวนี้ก็ค่อยเอา mcXml ไปลง database //สมมติเราเอาค่ามาจากที่เราลง database มาใช้ string restoreXml = ds.Tables[0].rows[0]["XML_STRING"].toString(); MyClass restoreMc = (MyClass)ObjectPharsing.ToObject(restoreXml,typeof(MyClass)); |
| Print article | This entry was posted by Krucode on October 2, 2009 at 3:48 pm, and is filed under Uncategorized. Follow any responses to this post through RSS 2.0. You can leave a response or trackback from your own site. |