保存文件 - xmlSerializer

Eri*_*rik 7 c# xml serialization xml-serialization streamwriter

我正在创建一个使用此代码序列化文件的方法:

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();
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试构建时,Visual Studio告诉我:"错误1找不到类型或命名空间名称'type'(您是否缺少using指令或程序集引用?)c:\ users\erik\documents\visual studio 2013\Projects\FileSerializer\FileSerializer\Class1.cs 16 65 FileSerializer"

为什么是这样?

**编辑*

适用的新代码:

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;
}
Run Code Online (Sandbox Code Playgroud)

通过调用读取:

myClass newClass = (myClass)Read(file, type);
Run Code Online (Sandbox Code Playgroud)

通过致电保存:

Save(object, path, type);
Run Code Online (Sandbox Code Playgroud)

谢谢!埃里克

EZI*_*EZI 11

你的错误是在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);
    }
}
Run Code Online (Sandbox Code Playgroud)