Save File - xmlSerializer

I am creating a method to serialize a file using this code:

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

But Visual Studio tells me about this when I try to create: "Error 1 Could not find the type or namespace name" type "(using directive or assembly reference missing?) C: \ users \ erik \ documents \ visual studio 2013 \ Projects \ FileSerializer \ FileSerializer \ Class1.cs 16 65 FileSerializer "

Why is this?

**EDIT*

New code that works:

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

read by phone:

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

Save by phone:

 Save(object, path, type); 

Thanks! Erik

+5
source share
3 answers

Your error is in new XmlSerializer(typeof(type)); . You do not need typeof . new XmlSerializer(type); enough.

Since you serialize the file object (and its type can be defined in the function), you do not need to pass its type. Thus, your code can be rewritten as

 public void Save<T>(T file, String path) { XmlSerializer serializer = new XmlSerializer(typeof(T)); using (StreamWriter writer = new StreamWriter(path)) { serializer.Serialize(writer, file); } } 
+7
source
 var serializer = new System.Xml.Serialization.XmlSerializer(type); 

instead

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

XmlSerializer accepts a Type parameter. Type already has a Type type, so you don't need to call it typeof() . typeof() is only required when you put the class name or general parameter inside the brackets.

0
source

Source: https://habr.com/ru/post/1207842/


All Articles