簡體   English   中英

如何在C#中將類名傳遞給XML解析函數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM