【问题标题】:Save file - xmlSerializer保存文件 - xmlSerializer
【发布时间】:2015-01-26 10:49:37
【问题描述】:

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

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 文件序列化器 "

这是为什么?

**编辑*

有效的新代码:

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);

谢谢! 埃里克

【问题讨论】:

  • new XmlSerializer(type); + 不需要@ @path

标签: c# xml serialization xml-serialization streamwriter


【解决方案1】:

您的错误在new XmlSerializer(typeof(type));。你不需要typeofnew 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);
    }
}

【讨论】:

    【解决方案2】:
    var serializer = new System.Xml.Serialization.XmlSerializer(type);
    

    而不是

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

    【讨论】:

      【解决方案3】:

      XmlSerializer 采用Type 参数。 type 已经是 Type 类型,所以你不需要调用 typeof() 就可以了。 typeof() 仅在您将类名或泛型参数放在括号内时才需要。

      【讨论】:

        猜你喜欢
        • 2011-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-19
        相关资源
        最近更新 更多