1

私のプロジェクトでは、Deviceオブジェクトを保存および取得するためのxmlファイルがあり、ユーザーが手動ではなくアプリケーションによってのみxmlファイルに追加または削除できるようにしたいので、何らかの形式のデータをストーリー化する必要がありますユーザーはasp.netのviewStateのようにそれを理解できませbase64ん他の何か

私の質問は、データをxmlファイルに保存する方法ですが、ユーザーが何が書かれているのか理解できないようにしたいです

これは私のデバイスクラスです

public class Device
    {
        public string Username { get; set; }
        public string AgentName { get; set; }
        public string Password { get; set; }
        public string Domain { get; set; }
        public string PeerURI { get; set; }
        public string SipURI { get; set; }
        public string FQDN { get; set; }
        public Enums.DeviceType Type { get; set; }
        public Enums.ServerTransportType TransportType { get; set; }
        public bool IsInitialized { get; set; }
    }

これは私のxmlファイルです

<?xml version="1.0" encoding="utf-8"?>
<settings>
  <username>foo</username>
  <AgentName>foo1</AgentName>
  <password>foo2</password>
  <domain>go</domain>
  <peerUri>140.242.250.200</peerUri>
  <sipUri>sip:xxx@xxxxx.com</sipUri>
  <fqdn>ff.go.xxxx.com</fqdn>
  <type>2</type>
  <transportType>2</transportType>
</settings>
4

4 に答える 4

2

このようなものは、シリアル化プロセス全体をエンコードするBase64で機能するはずです...

using System.IO;
using System.Security.Cryptography;
using System.Xml.Serialization;

..。

private void WriteToFile(Device device, string filePath)
{
    using (FileStream fs = new FileStream(filePath, FileMode.Create))
    {
        using (CryptoStream cs = new CryptoStream(fs, new ToBase64Transform(), CryptoStreamMode.Write))
        {
            XmlSerializer x = new XmlSerializer(typeof(Device));
            x.Serialize(cs, device);
        }
    }
}

private Device ReadFromFile(string filePath)
{
    using (FileStream fs = new FileStream(filePath, FileMode.Open))
    {
        using (CryptoStream cs = new CryptoStream(fs, new FromBase64Transform(), CryptoStreamMode.Read))
        {
            XmlSerializer x = new XmlSerializer(typeof(Device));
            return x.Deserialize(cs) as Device;
        }
    }
}
于 2012-07-28T16:24:24.660 に答える
2

Base64で十分です。

String username = "foo";
byte[] EncodeAsBase64 = System.Text.ASCIIEncoding.ASCII.GetBytes(username);
string enc_username = System.Convert.ToBase64String(EncodeAsBase64);

次に、を使用しserializerてenc_usernameを保存します。

于 2012-07-28T16:10:55.413 に答える
1

XMLデータファイルをテキストエディタで編集できるようにしたくない場合は、次のいずれかを実行します。

  • XMLを使用するべきではなく、これをカスタムバイナリ形式に保存する必要があります。
  • 暗号化されたXMLを使用する必要があります。
于 2012-07-28T04:59:56.517 に答える
1

バイナリシリアル化を使用する場合、ファイルは人間が読める形式ではありません。

これがあなたの問題の短い例です:

public class Enums
{
    public enum DeviceType
    {
        Mouse,
        HardDisk,
        CdRom,
    }

    public enum ServerTransportType
    {
        Udp,
        Tcp,
    }
}

[Serializable]
public class Device
{
    public string Username { get; set; }
    public string AgentName { get; set; }
    public string Password { get; set; }
    public string Domain { get; set; }
    public string PeerURI { get; set; }
    public string SipURI { get; set; }
    public string FQDN { get; set; }
    public Enums.DeviceType Type { get; set; }
    public Enums.ServerTransportType TransportType { get; set; }
    public bool IsInitialized { get; set; }
}

public class BinarySerialize
{
    public void Test()
    {
        var device = new Device();

        device.Username = "userName";
        device.AgentName = "agentName";
        device.Password = "password";
        device.Domain = "domain";
        device.PeerURI = "peerURI";
        device.SipURI = "sipURI";
        device.FQDN = "fqdn";
        device.Type = Enums.DeviceType.HardDisk;
        device.TransportType = Enums.ServerTransportType.Tcp;
        device.IsInitialized = true;

        string fileName = @"C:\temp\device.bin";
        this.Serialize(device, fileName);

        var d = this.Deserialize(fileName);
    }

    public void Serialize(Device device, string fileName)
    {
        using (Stream stream = File.Open(fileName, FileMode.Create))
        {
            BinaryFormatter bformatter = new BinaryFormatter();
            bformatter.Serialize(stream, device);
            stream.Close();
        }
    }

    public Device Deserialize(string fileName)
    {
        var device = new Device();

        using (Stream stream = File.Open(fileName, FileMode.Open))
        {
            BinaryFormatter bformatter = new BinaryFormatter();
            device = (Device)bformatter.Deserialize(stream);
            stream.Close();
        }

        return device;
    }
于 2012-07-28T16:49:58.107 に答える