我正在使用下面的代码创建一个序列化文件的方法:
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);谢谢!埃里克
发布于 2014-11-28 03:32:21
您的错误在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);
}
}发布于 2014-11-28 03:20:28
var serializer = new System.Xml.Serialization.XmlSerializer(type);而不是
XmlSerializer serializer = new XmlSerializer(typeof(type));发布于 2014-11-28 03:20:41
XmlSerializer接受一个Type参数。type已经是Type类型,所以您不需要对它调用typeof()。只有在将类名或泛型参数放入括号中时,才需要typeof()。
https://stackoverflow.com/questions/27177445
复制相似问题