• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

[.Net] Basic Xml Serialize and Xml Deserialize

Các bài viết hướng dẫn về Visual Basic .NET và C#

Moderators: tungcan5diop, QUANITGROBEST

User avatar
anhtuyenbk
Guru
Guru
Posts: 1311
Joined: Thu 22/09/2005 4:12 pm
Location: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 times

[.Net] Basic Xml Serialize and Xml Deserialize

Postby anhtuyenbk » Wed 12/08/2009 10:24 am

Tên bài viết: Basic Xml Serialize and Xml Deserialize
Tác giả: Nguyễn Anh Tuyên
Cấp độ bài viết: Cơ bản
Tóm tắt: Basic Xml Serialize and Xml Deserialize



Basic Xml Serialize and Xml Deserialize

- Bài này sẽ hướng dẫn cho các bạn kỹ thuật cơ bản về 2 công nghệ này.
- Xml Serialize là các công nghệ cho phép bạn lưu các public properties and fields của một object vào trong một serial format (cụ thể ở đây là định dạng XML) để thuận tiện cho việc lưu trữ cũng như chia sẻ.
- Xml Deserialize là một công nghệ ngược lại với Xml Serialize, nó sẽ giúp bạn tạo lại đối tượng trước đó với đầy đủ các thuộc tính và field dựa vào file XML mà bạn đã lưu trữ đối tượng này.
- Mối trong những ứng dụng phổ biến của hai công nghệ này chính là Web service, nên mà các thông tin được truyền đi và nhận lại dưới dạng XML.
- Bây giờ bạn có một class Personal mô tả các thông tin về một cá nhân như sau:

Code: Select all

  1. public class Personal
  2.        {
  3.             public string Name, Age, Address, Phone;
  4.         }
  5.  

- Bạn tạo ra một instance từ class này và nó lưu trữ các thông tin về 1 cá nhân cụ thể ví dụ như

Code: Select all

  1. Personal personal = new Personal();
  2.             personal.Name = "Toi la ai";
  3.             personal.Age = "30";
  4.             personal.Address = "123 duong gi do";
  5.             personal.Phone = "123456789";
  6.  

- Giờ bạn muốn lưu những thông tin này vào một file xml để lần sau bạn có thể truy xuất lại những thông tin này một cách nhanh chóng. Bạn có thể làm điều này dễ dàng nhờ vào Xml Serialize.
- Đầu tiên bạn cần sử dụng 2 namespace sau đây

Code: Select all

  1. using System.IO;
  2. using System.Xml.Serialization;
  3.  


1. Lưu các thông tin trên lại
- Làm điều này nhơ công nghệ Xml XmlSerializer

Code: Select all

  1.         //tạo một object serializer dựa trên type of Personal class
  2.             XmlSerializer xmlserializer = new XmlSerializer(typeof(Personal));
  3.             //tạo object writer to write xml
  4.             StreamWriter writer = new StreamWriter("personal.xml");
  5.             xmlserializer.Serialize(writer, personal);
  6.             writer.Close();

- Các thông tin của bạn đã được lưu xong. File personal.xml nó được lưu trong thư mục Debug (cùng chỗ với file exe).Nó sẽ trông như thế này

Code: Select all

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <Personal xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  3.   <Name>Toi la ai</Name>
  4.   <Age>30</Age>
  5.   <Address>123 duong gi do</Address>
  6.   <Phone>123456789</Phone>
  7. </Personal>

- Bạn thấy hay ko, tát cả thông tin đã được lưu lại theo một format dễ đọc.

2. Tạo lại đối tượng từ những thông tin đã lưu trong Xml.
- Bạn đã lưu đươc object Personal thành xml rồi.
- Giờ một ngày nào đó, bạn muốn từ file xml này tạo lại đối tượng Personal, chẳng lẽ bạn phải dùng lớp XmlDocument để đọc lại từng node trong file xml rồi gán lại các giá trị của chúng cho đói tượng Personal u, như vậy thật là mất thời gian.
- Công nghệ Xml Deserialize sẽ giúp bạn làm điều đó nhanh chóng.

Code: Select all

  1. //tạo đói tượng reader để đọc file xml
  2.             StreamReader reader = new StreamReader("personal.xml");
  3.             //tạo một object serializer dựa trên type of Personal class
  4.             XmlSerializer xmlserializer = new XmlSerializer(typeof(Personal));
  5.             //get lại object personal from xml
  6.             Personal personal = (Personal)xmlserializer.Deserialize(reader);
  7.  
- Bạn thấy ko, bây giờ bạn đã có lại được đối tượng personal từ file xml rồi đó.
- Bây giờ bạn đã có thể sử dụng đối tượng này theo ý của bạn rồi đó.

Nếu các bạn muốn tìm hiểu sâu hơn về các công nghệ này có thể tham khảo ở đay
http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx


Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang

User avatar
vo_minhdat2007
Quản trị
Quản trị
Posts: 2227
Joined: Sun 17/07/2005 1:40 am
Has thanked: 13 times
Been thanked: 87 times
Contact:

Re: [.Net] Basic Xml Serialize and Xml Deserialize

Postby vo_minhdat2007 » Sat 05/09/2009 9:21 pm

Cái này xem ra vẫn còn hơi mệt. Trong class em có property MarkColor kiểu Color nó bó tay :(, chỉ lưu 1 thẻ <Color /> dù rõ ràng nó có giá trị (red, green, ...)

tai_computer
Thành viên chính thức
Thành viên chính thức
Posts: 27
Joined: Sat 15/08/2009 11:03 am
Has thanked: 1 time

Re: [.Net] Basic Xml Serialize and Xml Deserialize

Postby tai_computer » Wed 21/10/2009 3:11 pm

Làm không đuoc anh oi
Anh có thê goi File đó lên đuoc khong
Thanks =D>

User avatar
anhtuyenbk
Guru
Guru
Posts: 1311
Joined: Thu 22/09/2005 4:12 pm
Location: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 times

Re: [.Net] Basic Xml Serialize and Xml Deserialize

Postby anhtuyenbk » Wed 21/10/2009 3:28 pm

Project đó mất rồi.
Nó chỉ có vài dòng code cơ bản thôi, bạn tập làm cho quen. Copy đúng là nó sẽ chạy.
Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang

User avatar
playgemboy
Thành viên danh dự
Thành viên danh dự
Posts: 289
Joined: Sun 13/04/2008 6:10 am
Location: Bình Phú, Quận 6, TP.HCM
Been thanked: 1 time
Contact:

Re: [.Net] Basic Xml Serialize and Xml Deserialize

Postby playgemboy » Mon 01/02/2010 12:07 pm

Bây giờ mình có một .xml chứa các dữ liệu, liệu mình có thể suy ra được kiểu của đối tượng để load vào cho nhanh không nhỉ?

Ví dụ một file .xml có nội dung như sau?
[xml]<data>
<param s="PersonName1">
<i va="DataID1">StringData1</i>
<i va="DataID2">StringData2</i>
<i va="DataID3">StringData3</i>
<i va="DataID4">StringData4</i>
<i va="DataID5">StringData5</i>
<i va="DataID6">StringData6</i>
</param>
<param s="PersonName2">
<i va="DataID1">StringData1</i>
<i va="DataID2">StringData2</i>
<i va="DataID3">StringData3</i>
<i va="DataID4">StringData4</i>
</param>
</data>[/xml]

Nếu dùng cách bình thường thì em làm như sau:

[vbnet]Structure pData
Dim pDataID As String
Dim pDataString As String
End Structure

Structure Person
Dim pName As String
Dim pData() As pData
End Structure

Dim DataRead as Person
[/vbnet]

Sau đó dùng XmlDocument để đọc rồi gán lại các giá trị của chúng (như vậy thì hơi cực và chạy chậm)
Em đọc bài này xong tính áp dụng nhưng không khai báo được kiểu của nó.
Anh ATBK giúp em được ko nhỉ?
<I Come Back>

User avatar
vo_minhdat2007
Quản trị
Quản trị
Posts: 2227
Joined: Sun 17/07/2005 1:40 am
Has thanked: 13 times
Been thanked: 87 times
Contact:

Re: [.Net] Basic Xml Serialize and Xml Deserialize

Postby vo_minhdat2007 » Sun 30/01/2011 4:15 pm

Qua nhu cầu, mình đã mò được cách dùng XmlSerializer cho kiểu Color và Image như class UIInfo bên dưới, mời các bạn tham khảo :)

  1. Imports System.ComponentModel
  2. Imports System.Xml.Serialization
  3. Imports System.IO
  4.  
  5. Public Class UIInfo
  6.  
  7.     Property Size As Integer
  8.     Property Color As Integer()
  9.  
  10.     <XmlIgnore()> _
  11.     Property Icon As Image
  12.  
  13.     <XmlElementAttribute("Picture")> _
  14.     Public Property PictureByteArray() As Byte()
  15.         Get
  16.             If Icon IsNot Nothing Then
  17.                 Dim BitmapConverter As TypeConverter = TypeDescriptor.GetConverter(Icon.[GetType]())
  18.                 Return DirectCast(BitmapConverter.ConvertTo(Icon, GetType(Byte())), Byte())
  19.             Else
  20.                 Return Nothing
  21.             End If
  22.         End Get
  23.  
  24.         Set(ByVal value As Byte())
  25.             If value IsNot Nothing Then
  26.                 Icon = New Bitmap(New MemoryStream(value))
  27.             Else
  28.                 Icon = Nothing
  29.             End If
  30.         End Set
  31.     End Property
  32.  
  33.     Property UseIcon As Boolean
  34.  
  35.     Sub New()
  36.         Size = 1
  37.         ReDim Color(3)
  38.         Icon = Nothing
  39.         UseIcon = True
  40.     End Sub
  41.  
  42.     Function Clone() As UIInfo
  43.         Dim I As New UIInfo
  44.         I.Size = Size
  45.         I.Color = Color.Clone
  46.         I.Icon = Icon.Clone
  47.         I.UseIcon = UseIcon
  48.         Return I
  49.     End Function
  50.  
  51. End Class
  52.  


Trong đó, mảng Color là mảng có 4 phần tử tương ứng là A, R, G, B. Khi lưu trữ ta sử dụng Color.A, Color.R, ... , còn khi cần sử dụng thì dùng Color.FromARGB. Hoặc nếu muốn đơn giản khi xử lí thì bạn dùng luông XMLIgnore và làm một Property Color tương tự.

binkute
Thành viên năng nổ
Thành viên năng nổ
Posts: 57
Joined: Tue 15/01/2013 8:01 pm
Has thanked: 10 times
Been thanked: 3 times

Re: [.Net] Basic Xml Serialize and Xml Deserialize

Postby binkute » Mon 01/04/2013 11:50 pm

Trường hợp dùng công nghệ này để lưu thông tin kết nối CSDL, có cách gì để mã hóa thông tin không bạn nhỉ?


Return to “[.NET] Bài viết hướng dẫn”

Who is online

Users browsing this forum: No registered users and 1 guest