保存文件 - XmlSerializer

9
我正在创建一个方法,使用以下代码对文件进行序列化:
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:\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;
}

通过调用以下代码进行读取:

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

通过调用实现节省:

Save(object, path, type);

谢谢! Erik


1
新的 XmlSerializer(type); 在 @path 中不需要使用 @ 符号。 - L.B
3个回答

16

你的错误在于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);
    }
}

0
var serializer = new System.Xml.Serialization.XmlSerializer(type);

替代

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

0

XmlSerializer 接受一个 Type 参数。 type 已经是 Type 类型,所以您不需要在其上调用 typeof()。只有当您将类名或泛型参数放入括号中时才需要使用 typeof()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接