0

私はいくつかの構成データを保持するためにこのコードを持っています

XmlSerializer xmlSerializer = new XmlSerializer(typeof(Entities.Application));
TextReader textReader = new StreamReader(XMLFile);
sequences = (Entities.Application)xmlSerializer.Deserialize(textReader);
textReader.Close();

今、私はそれを少し隠して、どういうわけかXMLよりもバイナリ形式を使用したいと思います(とにかくXMLを維持するために)。

できますか?(または他のアプローチもありますか?)

どのようにそれを行うことができますか?

ありがとうございました!

4

2 に答える 2

1

バイナリデータをテキストとしてエンコードする必要があります。すでに圧縮されていますか?もしそうなら、それはおそらく最初のステップです。次に、バイナリをどのようにエンコードするかを決定する必要があります。Base91はかなり効率的であることが意図されています:http://base91.sourceforge.net/

于 2012-08-01T14:27:33.557 に答える
1

XMLをわかりにくくしたい場合は、2つの簡単なオプションとして、XMLをBase64でエンコードするか、XML要素でBase64を使用します。

// Simple Base64 conversion (using UTF8 for simplicity)
// ========

// Assume [sequences] is variable of type [Entities.Application]
string xmlString;
var xs = new XmlSerializer(typeof(Entities.Application));
using (var sw = new StringWriter())
{
    xs.Serialize(sw, sequences);
    xmlString = sw.ToString();
}
string encoded = System.Convert.ToBase64String(
                    System.Text.Encoding.UTF8.GetBytes(xmlString));

// Converting encoded [Entities.Application] to decoded XML string,
// using some of your code for consistency.
string encoded;
using (TextReader textReader = new StreamReader(XMLFile))
{
    encoded = textReader.ReadToEnd();
    textReader.Close();
}
string decoded = System.Text.Encoding.UTF8.GetString(
                    System.Convert.FromBase64String(encoded));
XmlSerializer xmlSerializer = new XmlSerializer(typeof(Entities.Application));
using (var sr = new StringReader(decoded))
{
    sequences = (Entities.Application)xmlSerializer.Deserialize(sr);
}


// Inserting Base64 in XmlElement
// ========

// Optional: the old MSXML.DOMDocument had nodeTypedValue, and you
// can set the same attributes if you are going to use DOMDocument, although
// it is still a good idea to tag the element so you know its datatype.
node.SetAttribute("xmlns:dt", "urn:schemas-microsoft-com:datatypes");
node.SetAttribute("dt", "urn:schemas-microsoft-com:datatypes", "bin.base64");

// Assume serialized data has already been encoded as shown above
var elem = node.AppendChild(xmlDoc.CreateTextNode(encoded));
于 2012-08-01T16:37:25.677 に答える