2013-12-18 107 views
1

我有一系列XML文件,我想從客戶端隱藏,我想僅適用於應用程序。我使用XmlSerializer對他們進行讀寫。如何才能做到這一點?我閱讀了關於嵌入式資源的內容,但從我所看到的內容來看,我需要使用某種流來讀取和寫入文件。我想知道是否有另一種方法可以讓我使用XmlSerializer訪問它們並將它們隱藏在客戶端。如何隱藏XML文件內容

+0

當你說「隱藏」我猜想簡單的標記文件爲「隱藏」是不能接受的嗎? –

+0

我需要能夠從應用程序中讀取它。如果它被標記爲隱藏,我仍然可以做到這一點? – user2399378

+0

@ user2399378我寫了一個答案,我假設你在談論.NET環境,如果你沒有用更多的細節來標記你的問題,這可能適用於Java,.NET或其他任何與XmlSerializer類的東西... –

回答

1

如果你只是想隱藏它們(混淆的阻止隨便變化),你可能會考慮壓縮它們。例如對於這個C#反序列化功能的例子:

static T Deserialize<T>(string path, object obj) 
{ 
    var serializer = new XmlSerializer(typeof(T)); 

    using (var stream = new GZipStream(File.OpenRead(path), 
             CompressionMode.Decompress)) 
    { 
     return (T)serializer.Deserialize(stream); 
    } 
} 

您的客戶將看到一個二進制文件,他們將不能夠更改/檢查它(而且它只是一個壓縮流使之不能甚至解壓縮它們)。爲了清楚起見,這相當於序列化功能:

static void Serialize<T>(string path, T obj) 
{ 
    var serializer = new XmlSerializer(typeof(T)); 

    using (var stream = new GZipStream(File.Create(path), 
             CompressionMode.Compress)) 
    { 
     serializer.Serialize(stream, obj); 
    } 
} 

注:在你原來的問題,你沒有說你的環境中任何事物(.NET的Java?),我提供的代碼假設你在C#編程但是您可以將相同的技術應用於您正在使用的任何其他語言/環境。

更新這是一個小的測試程序,看看它是如何工作的:

public class Test 
{ 
    public string Name { get; set; } 
    public string Value { get; set; } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     Serialize(@"c:\test.dat", new Test { Name = "A", Value = "B" }); 
    } 

    // Place here Serialization<T>() method 
} 
+0

.NET,我忘了提到這一點。這似乎是一個很好的方法,我會嘗試一下,看看它是如何發展的。謝謝 – user2399378

+0

@ user2399378歡迎您。這不是您可以用來保存您的許可證數據(或明智的信息)的東西,但是用於混淆文本文件是很好的,不應該被_super-users_更改/檢查。 –

+0

我有一些情況需要壓縮一些文件,有些則不需要。我修改了序列化方法來處理這些情況,但我不確定是否需要反序列化,我如何檢查文件是否被壓縮? – user2399378