HmX*_*mXa 1 c# xml-serialization
我们如何通过函数重载方法传递不同类的不同对象?
示例代码:
static public void SerializeToXML(Movie movie)
{
XmlSerializer serializer = new XmlSerializer(typeof(Movie));
TextWriter textWriter = new StreamWriter(@"C:\movie.xml");
serializer.Serialize(textWriter, movie);
textWriter.Close();
}
Run Code Online (Sandbox Code Playgroud)
当我使用这段代码时:
static public void SerializeToXML(FbTextView p, FbTextField q)
{
try
{
XmlSerializer textviewserilizer = new XmlSerializer(typeof(FbTextView));
XmlSerializer textfieldserilizer = new XmlSerializer(typeof(FbTextField));
TextWriter textWriter = new StreamWriter(@"D:\movie.xml");
textviewserilizer.Serialize(textWriter, p);
textfieldserilizer.Serialize(textWriter, q);
textWriter.Close();
}
catch (Exception ex)
{
while (ex != null)
{
Trace.WriteLine(ex.Message);
ex = ex.InnerException;
MessageBox.Show(ex.Message);
}
throw;
}
}
Run Code Online (Sandbox Code Playgroud)
它的输出xml显示一些结果:
XML Parsing Error: junk after document element
Location: file:///D:/movie.xml
Line Number 6, Column 14:</FbTextView><?xml version="1.0" encoding="utf-8"?>
-------------^
Run Code Online (Sandbox Code Playgroud)
您可以使用generics以下方式编写它:
public static void SerializeToXml<T>(this T objectToSerialize, string fileName)
{
XmlSerializer serializer = new XmlSerializer(objectToSerialize.GetType());
using (TextWriter textWriter = new StreamWriter(fileName))
{
serializer.Serialize(textWriter, objectToSerialize);
}
}
Run Code Online (Sandbox Code Playgroud)
constrain只接受某些类型.using statementextension method通过在第一个参数之前添加this关键字来将方法转换为a .如果您将SerializeToXml方法作为扩展方法,则可以通过以下两种方式之一调用它,结果将是相同的:
movie.SerializeToXml(@"C:\movie.xml");
SerializeToXml(movie, @"C:\movie.xml");
Run Code Online (Sandbox Code Playgroud)