How to convert XML file to binary file



How could I convert XML file to Binary file(BXML) for hiding its contents to distribute?


I have used CryptoBinary/DecrytBinary for hiding XML file. But, I'd like to convert XML file to Binary file directly.



///-----------------------------------------------------------------
/// Using part
private void GetBookInfo()
{
//Books XML file
Utility.XmlDeSerializer<CBooks>(ref Uinst, Environment.CurrentDirectory + "\\Book.xml");
// Books Binary file
string binXmlString = Utility.ReadCryptoBinaryFile(Environment.CurrentDirectory + "\\Book.bin");
Utility.XmlStringToObject<CBooks>(ref Uinst, binXmlString);
}

private void SetBookInfo()
{
// Books XML file
Utility.XmlSerializer<CBooks>(Uinst, Environment.CurrentDirectory + "\\Book.xml");
//For test. for Books Binary file
string binXmlString = Utility.ObjectToXmlString<CBooks>(Uinst);
Utility.WriteCryptoBinaryFile(Environment.CurrentDirectory + "\\Book.bin", binXmlString);
}




///-----------------------------------------------------------------
/// Utility part
public static void XmlDeSerializer<T>(ref T t, string path)
{
try
{
XmlSerializer serializer = new XmlSerializer(t.GetType());
using (StreamReader Rstream = new StreamReader(path))
{
t = (T)serializer.Deserialize(Rstream);
Rstream.Close();
}
}
catch (Exception ex)
{
throw new InvalidOperationException("Failed to create object from xml string\r\n{0}", ex.InnerException);
}
}

public static string ReadCryptoBinaryFile(string path)
{
FileStream stream = null;
StreamReader reader = null;
try
{
stream = new FileStream(path, FileMode.Open, FileAccess.Read);

DESCryptoServiceProvider cryptic = new DESCryptoServiceProvider();

cryptic.Key = Encoding.UTF8.GetBytes(Value.sKey);
cryptic.IV = Encoding.UTF8.GetBytes(Value.sIV);

CryptoStream crStream = new CryptoStream(stream,
cryptic.CreateDecryptor(), CryptoStreamMode.Read);

//reader = new StreamReader(crStream);
//rreturn reader.ReadToEnd();
BinaryReader br = new BinaryReader(crStream);
return Encoding.UTF8.GetString(br.ReadBytes((int)stream.Length));
}
#region
catch (Exception ex)
{
throw new IOException(string.Format("Message: {0}", ex));
}
finally
{
if (reader != null)
{
reader.Close();
}
if (stream != null)
{
/*stream.Flush(); */
stream.Close();
}
}
#endregion
}
public static void XmlStringToObject<T>(ref T obj, string xmlString)
{
try
{
XmlSerializer xs = new XmlSerializer(obj.GetType());
MemoryStream ms = new MemoryStream(StringToBytes(xmlString, Encoding.UTF8));
XmlTextWriter xmlTextWriter = new XmlTextWriter(ms, Encoding.UTF8);
obj = (T)xs.Deserialize(ms);
}
catch (Exception ex)
{
throw new InvalidOperationException("Failed to " + "create object from xml string", ex);
}
}
public static void XmlSerializer<T>(T obj, string path)
{
try
{
XmlSerializer xmlserializer = new XmlSerializer(obj.GetType());
using (StreamWriter Wstream = new StreamWriter(path))
{
xmlserializer.Serialize(Wstream, obj);
Wstream.Flush(); Wstream.Close();
}
}
catch (Exception ex)
{
throw new InvalidOperationException("Failed to create xml file from object\r\n{0}", ex);
}
}

public static string ObjectToXmlString<T>(T obj)
{
try
{
string xmlString = null;
MemoryStream ms = new MemoryStream();
XmlSerializer xs = new XmlSerializer(obj.GetType());
XmlTextWriter xtw = new XmlTextWriter(ms, Encoding.UTF8);
xs.Serialize(xtw, obj);
ms = (MemoryStream)xtw.BaseStream;
//xtw.WriteBinHex(ms.ToArray(), 0, (int)ms.Length);
xmlString = BytesToString(ms.ToArray(), Encoding.UTF8);
return xmlString;
}
catch (Exception ex)
{
throw new InvalidOperationException("Failed to " + "create xml string from object", ex);
}
}

public static void WriteCryptoBinaryFile(string path, string data)
{
FileStream stream = null;
CryptoStream crStream = null;
try
{
stream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write);

DESCryptoServiceProvider cryptic = new DESCryptoServiceProvider();

cryptic.Key = Encoding.UTF8.GetBytes(Value.sKey);
cryptic.IV = Encoding.UTF8.GetBytes(Value.sIV);

crStream = new CryptoStream(stream,
cryptic.CreateEncryptor(), CryptoStreamMode.Write);

//byte[] bt = Encoding.UTF8.GetBytes(data);
//crStream.Write(bt, 0, bt.Length);
BinaryWriter bw = new BinaryWriter(crStream);
bw.Write(Encoding.UTF8.GetBytes(data));
}
#region
catch (Exception ex)
{
throw new IOException(string.Format("Message: {0}", ex));
}
finally
{
if (crStream != null)
{
crStream.Flush(); crStream.Close();
}
if (stream != null)
{
/*stream.Flush(); */
stream.Close();
}
}
#endregion
}

No comments:

Post a Comment