首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保存文件- xmlSerializer

保存文件- xmlSerializer
EN

Stack Overflow用户
提问于 2014-11-28 03:08:40
回答 3查看 22.6K关注 0票数 9

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

代码语言:javascript
复制
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”

为什么会这样呢?

**编辑*

可以工作的新代码:

代码语言:javascript
复制
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;
}

通过调用以下命令读取:

代码语言:javascript
复制
myClass newClass = (myClass)Read(file, type);

调用以下命令进行保存:

代码语言:javascript
复制
Save(object, path, type);

谢谢!埃里克

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-11-28 03:32:21

您的错误在new XmlSerializer(typeof(type));中。你不需要typeofnew XmlSerializer(type);就足够了。

由于序列化了file对象(其类型可以在函数中确定),因此不必传递其类型。因此,您的代码可以重写为

代码语言:javascript
复制
public void Save<T>(T file, String path)
{
    XmlSerializer serializer = new XmlSerializer(typeof(T));

    using (StreamWriter writer = new StreamWriter(path))
    {
        serializer.Serialize(writer, file);
    }
}
票数 14
EN

Stack Overflow用户

发布于 2014-11-28 03:20:28

代码语言:javascript
复制
var serializer = new System.Xml.Serialization.XmlSerializer(type);

而不是

代码语言:javascript
复制
XmlSerializer serializer = new XmlSerializer(typeof(type));
票数 0
EN

Stack Overflow用户

发布于 2014-11-28 03:20:41

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27177445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档