[英]How to pass a class name to a XML Parsing Function in C#?
我不知道為什么我會堅持下去,但在這里需要一些幫助。 我有多個具有多個屬性的類。 我正在嘗試使用下面提到的這種方法解析XML文件。
private void button_Click(object sender, RoutedEventArgs e)
{
string XMLFilePath = Path.Combine(Package.Current.InstalledLocation.Path, "UTC34.xml");
//string data = await FileIO.ReadTextAsync(file);
if(File.Exists(XMLFilePath))
{
FileStream fs = new FileStream(XMLFilePath, FileMode.Open, FileAccess.Read);
TextReader ff = new StreamReader(fs);
XDocument xmldoc = XDocument.Parse(ff.ReadToEnd());
XmlSerializer ser1 = new XmlSerializer(typeof(FlightPlan));
using (var reader = xmldoc.CreateReader())
{
var serializer = new XmlSerializer(typeof(FlightPlan));
FlightPlan someTest = serializer.Deserialize(reader) as FlightPlan;
// NotSupportedException here (as inner exception)
}
}
我被困在這里
XmlSerializer ser1 = new XmlSerializer(typeof(FlightPlan)); // FlightPlan是一個類
我想編寫一個方法,在其中我將它們命名為Classname,因為XML文件中有多個類。我不想為多個類編寫多個函數。
我該如何實現?
這是我用於xml序列化的代碼片段。
public static class Serializer<T> where T : class
{
public static void Serialize(string filename, T obj)
{
using (TextWriter WriteFileStream = new StreamWriter(filename, false))
{
XmlSerializer SerializerObj = new XmlSerializer(typeof(T));
SerializerObj.Serialize(WriteFileStream, obj);
}
}
public static T Deserialize(string filename)
{
if (File.Exists(filename))
{
using (FileStream fs = new FileStream(filename, FileMode.Open))
{
XmlSerializer SerializerObj = new XmlSerializer(typeof(T));
using (XmlReader reader = new XmlTextReader(fs))
{
if (SerializerObj.CanDeserialize(reader))
{
return SerializerObj.Deserialize(reader) as T;
}
}
}
}
return null;
}
}
更新
要傳遞多個類,您應該創建另一個包含其他類的類。
[Serializable]
class Container
{
public MyClass1 One { get; set; }
public MyClass2 Two { get; set; }
}
[Serializable]
class MyClass1
{
}
[Serializable]
class MyClass2
{
}
然后打電話
static void Main(string[] args)
{
Serializer<Container>.Serialize("path", new Container());
}
我這樣使用它:
string classname = typeof(FlightPlan).Name;
要么
this.GetType().Name
將此作為參數傳遞或在類型上調用.Name。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.