• 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#

Điều hành viên: tungcan5diop, QUANITGROBEST

Hình đại diện của người dùng
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: T.Năm 22/09/2005 4:12 pm
Đến từ: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 time

[.Net] Basic Xml Serialize and Xml Deserialize

Gửi bàigửi bởi anhtuyenbk » T.Tư 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:

Mã: Chọn hết

  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ư

Mã: Chọn hết

  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

Mã: Chọn hết

  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

Mã: Chọn hết

  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

Mã: Chọn hết

  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.

Mã: Chọn hết

  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

Hình đại diện của người dùng
vo_minhdat2007
Quản trị
Quản trị
Bài viết: 2227
Ngày tham gia: CN 17/07/2005 1:40 am
Has thanked: 13 time
Been thanked: 87 time
Liên hệ:

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

Gửi bàigửi bởi vo_minhdat2007 » T.Bảy 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
Bài viết: 27
Ngày tham gia: T.Bảy 15/08/2009 11:03 am
Has thanked: 1 time

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

Gửi bàigửi bởi tai_computer » T.Tư 21/10/2009 3:11 pm

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

Hình đại diện của người dùng
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: T.Năm 22/09/2005 4:12 pm
Đến từ: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 time

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

Gửi bàigửi bởi anhtuyenbk » T.Tư 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

Hình đại diện của người dùng
playgemboy
Thành viên danh dự
Thành viên danh dự
Bài viết: 289
Ngày tham gia: CN 13/04/2008 6:10 am
Đến từ: Bình Phú, Quận 6, TP.HCM
Been thanked: 1 time
Liên hệ:

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

Gửi bàigửi bởi playgemboy » T.Hai 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>

Hình đại diện của người dùng
vo_minhdat2007
Quản trị
Quản trị
Bài viết: 2227
Ngày tham gia: CN 17/07/2005 1:40 am
Has thanked: 13 time
Been thanked: 87 time
Liên hệ:

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

Gửi bàigửi bởi vo_minhdat2007 » CN 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ổ
Bài viết: 57
Ngày tham gia: T.Ba 15/01/2013 8:01 pm
Has thanked: 10 time
Been thanked: 3 time

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

Gửi bàigửi bởi binkute » T.Hai 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ỉ?


Quay về “[.NET] Bài viết hướng dẫn”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.3 khách