传递 class 作为类型
Passing a class as type
我正在尝试传入一个类型对象以传递给序列化程序。
internal void SerializeXML(Object ObjType, String XMLRoot, Object Output, String Filename)
{
XmlSerializer serializer = new XmlSerializer(typeof(ObjType), new XmlRootAttribute(XMLRoot));
StreamReader reader = new StreamReader(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(Filename));
Output = (Type)serializer.Deserialize(reader);
reader.Close();
}
我想通过(Main.LanguageList.Language 是一个 class)来调用它:
SerializeXML(Main.LanguageList.Language, "Language", LanguageListFile, InternalLangListXML);
我得到 Object is a variable but is used as a type。
写一个泛型方法会更优雅:
internal void DeserializeXML<T>(String XMLRoot, T Output, String Filename)
{
XmlSerializer serializer = new XmlSerializer(typeof(T), new XmlRootAttribute(XMLRoot));
StreamReader reader = new StreamReader(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(Filename));
Output = (T)serializer.Deserialize(reader);
reader.Close();
}
并这样称呼它:
DeserializeXML<Main.LanguageList.Language>("Language", LanguageListFile, InternalLangListXML);
此外,建议将方法更改为 return 结果,而不是依赖输出参数:
internal T DeserializeXML<T>(String XMLRoot, String Filename)
{
XmlSerializer serializer = new XmlSerializer(typeof(T), new XmlRootAttribute(XMLRoot));
using (StreamReader reader = new StreamReader(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(Filename)))
{
return (T)serializer.Deserialize(reader);
}
}
然后可以这样调用:
var result = DeserializeXML<Main.LanguageList.Language>("Language", InternalLangListXML);
我正在尝试传入一个类型对象以传递给序列化程序。
internal void SerializeXML(Object ObjType, String XMLRoot, Object Output, String Filename)
{
XmlSerializer serializer = new XmlSerializer(typeof(ObjType), new XmlRootAttribute(XMLRoot));
StreamReader reader = new StreamReader(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(Filename));
Output = (Type)serializer.Deserialize(reader);
reader.Close();
}
我想通过(Main.LanguageList.Language 是一个 class)来调用它:
SerializeXML(Main.LanguageList.Language, "Language", LanguageListFile, InternalLangListXML);
我得到 Object is a variable but is used as a type。
写一个泛型方法会更优雅:
internal void DeserializeXML<T>(String XMLRoot, T Output, String Filename)
{
XmlSerializer serializer = new XmlSerializer(typeof(T), new XmlRootAttribute(XMLRoot));
StreamReader reader = new StreamReader(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(Filename));
Output = (T)serializer.Deserialize(reader);
reader.Close();
}
并这样称呼它:
DeserializeXML<Main.LanguageList.Language>("Language", LanguageListFile, InternalLangListXML);
此外,建议将方法更改为 return 结果,而不是依赖输出参数:
internal T DeserializeXML<T>(String XMLRoot, String Filename)
{
XmlSerializer serializer = new XmlSerializer(typeof(T), new XmlRootAttribute(XMLRoot));
using (StreamReader reader = new StreamReader(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(Filename)))
{
return (T)serializer.Deserialize(reader);
}
}
然后可以这样调用:
var result = DeserializeXML<Main.LanguageList.Language>("Language", InternalLangListXML);