Сохранить файл-xmlSerializer


Я создаю метод сериализации файла, используя этот код:

        public void Save(Object file, Type type, String path)
    {
        // Create a new Serializer
        XmlSerializer serializer = new XmlSerializer(typeof(type));

        // Create a new StreamWriter
        StreamWriter writer = new StreamWriter(@path);

        // Serialize the file
        serializer.Serialize(writer, file);

        // Close the writer
        writer.Close();
    }

Но Visual Studio говорит мне об этом, когда я пытаюсь построить: "Ошибка 1 не удалось найти имя типа или пространства имен "type"(отсутствует директива using или ссылка на сборку?) c:userserikdocumentsvisual studio 2013ProjectsFileSerializerFileSerializerClass1.cs 16 65 Файлосериализатор "

Почему это?

**EDIT *

Новый код, который работает:

        public void Save(Object file, String path, Type type)
    {
        // Create a new Serializer
        XmlSerializer serializer = new XmlSerializer(type);

        // Create a new StreamWriter
        TextWriter writer = new StreamWriter(path);

        // Serialize the file
        serializer.Serialize(writer, file);

        // Close the writer
        writer.Close();
    }

    public object Read(String path, Type type)
    {
        // Create a new serializer
        XmlSerializer serializer = new XmlSerializer(type);

        // Create a StreamReader
        TextReader reader = new StreamReader(path);

        // Deserialize the file
        Object file;
        file = (Object)serializer.Deserialize(reader);

        // Close the reader
        reader.Close();

        // Return the object
        return file;
    }

Читать по вызов:

myClass newClass = (myClass)Read(file, type);

Сохранить вызовом:

Save(object, path, type);

Спасибо! Эрик

3 5

3 ответа:

Ваша ошибка в new XmlSerializer(typeof(type));. Вам не нужно typeof. new XmlSerializer(type); достаточно.

Поскольку вы сериализуете объект file (и его тип можно определить в функции), вам не нужно передавать его тип. Таким образом, ваш код может быть переписан как

public void Save<T>(T file, String path)
{
    XmlSerializer serializer = new XmlSerializer(typeof(T));

    using (StreamWriter writer = new StreamWriter(path))
    {
        serializer.Serialize(writer, file);
    }
}
var serializer = new System.Xml.Serialization.XmlSerializer(type);

Вместо

XmlSerializer serializer = new XmlSerializer(typeof(type));

XmlSerializer принимает параметр Type. type уже имеет тип Type, поэтому вам не нужно вызывать typeof() на нем. typeof() требуется только тогда, когда вы помещаете имя класса или универсальный параметр в квадратные скобки.