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:
Post a Comment