gpt4 book ai didi

c# - 我们如何从XMLSerializer函数传递多个对象

转载 作者:太空宇宙 更新时间:2023-11-03 17:55:07 25 4
gpt4 key购买 nike

我们如何通过函数重载方法传递不同类的不同对象?

示例代码:

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


当我使用此代码时:

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


其输出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"?>
-------------^

最佳答案

您可以使用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);
}
}



泛型起初可能会有些混乱,但是绝对值得学习。简而言之,现在您的方法可以接受任何类型。
接受每种类型可能太宽松了,然后您可以 constrain仅接受某些类型。
将文件名作为参数传递给您的方法似乎是一个好主意,否则您只能使用该方法写入一个文件(名称)。
您还可以阅读有关 using statement的信息
正如L.B建议的那样,您可以通过在第一个参数之前添加this关键字来将方法转换为 extension method
如果要将其实现为扩展方法,则方法和类必须是静态的。


如果将SerializeToXml方法作为扩展方法,则可以通过以下两种方式中的任何一种来调用它,结果将是相同的:

movie.SerializeToXml(@"C:\movie.xml");

SerializeToXml(movie, @"C:\movie.xml");

关于c# - 我们如何从XMLSerializer函数传递多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13204078/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com