17.8.09

Dataset To XML và XML to Dataset, Object To XML và XML to Object

Khi cần chuyển dữ liệu qua webservice, do yêu cầu bảo mật dữ liệu, ta có thể mã hóa dữ liệu cho từng trường, nhưng như vậy cấu trúc dữ liệu vẫn có thể bị lộ. Giải pháp là chuyển dữ liệu về dạng XML (chuyển hẳn về dạng string) và sau đó convert lại. Sau đây là các hàm convert cực đơn giản để phục vụ việc này:

Dataset To XML và XML to Dataset

public static string DataSetToString(DataSet ds)

{

StringWriter stringWriter = new StringWriter();

ds.WriteXml(stringWriter);

return stringWriter.ToString();

}

public static DataSet StringToDataSet(string str)

{

DataSet ds = new DataSet();

try

{

XmlDocument doc = new XmlDocument();

doc.LoadXml(str);

ds.ReadXml(new XmlNodeReader(doc));

}

catch { }

return ds;

}

Object To XML và XML to Object

public static object Xml2Object(string xml, System.Type objType)

{

StringReader stream = null;

XmlTextReader reader = null;

try

{

// serialise to object

XmlSerializer serializer = new XmlSerializer(objType);

stream = new StringReader(xml); // read xml data

reader = new XmlTextReader(stream); // create reader

// covert reader to object

return serializer.Deserialize(reader);

}

catch

{

return null;

}

finally

{

if (stream != null) stream.Close();

if (reader != null) reader.Close();

}

}

public static string Object2Xml(object obj)

{

MemoryStream stream = null;

TextWriter writer = null;

try

{

stream = new MemoryStream(); // read xml in memory

writer = new StreamWriter(stream, Encoding.Unicode);

// get serialise object

XmlSerializer serializer = new XmlSerializer(obj.GetType());

serializer.Serialize(writer, obj); // read object

int count = (int)stream.Length; // saves object in memory stream

byte[] arr = new byte[count];

stream.Seek(0, SeekOrigin.Begin);

// copy stream contents in byte array

stream.Read(arr, 0, count);

UnicodeEncoding utf = new UnicodeEncoding(); // convert byte array to string

return utf.GetString(arr).Trim();

}

catch

{

return string.Empty;

}

finally

{

if (stream != null) stream.Close();

if (writer != null) writer.Close();

}

}

0 comments: