2013-12-18 4 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# но вы можете применить ту же технику с любым другим языком/средой, которую используете.

Update это небольшая программа испытаний, чтобы увидеть, как это работает:

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

@ пользователь2399378 приветствуется. Это не то, что вы можете использовать для сохранения ваших данных лицензии (или разумной информации), но хорошо использовать для обфускации текстовых файлов, которые нельзя изменять/проверять _super-users_. –

+0

У меня есть ситуация, когда некоторые файлы нужно сжимать, а некоторые нет. Я адаптировал метод сериализации для лечения этой ситуации, но я не уверен в десериализации, как я могу проверить, сжат ли файл или нет? – user2399378

Смежные вопросы