1

私はこのようなxmlファイルを持っています

<Student>
    <column Type="String">Name</column>
    <column Type="Int32">Age</column>
 </Student>

私は VS2008 を使用しています。実行時に列がわかりません。つまり、余分な列を xml ファイルに追加できます。

今私の質問は、このクラスを作成し、このタイプ(作成されたクラス)を(C#)Generics.ie Listなどに保存する方法です。

任意の助けをいただければ幸いです。

4

2 に答える 2

1

それは本当に難しいです。どうしてもランタイムクラスとしてそれをやりたいのなら、などを見る必要がありますTypeBuilder。率直に言って、あなたがすでにそれをよく知っているか、これが本当に重要でない限り、それはおそらく価値がありません。重要なこと:。を除いて、そのようなオブジェクトに対して実際にコーディングすることはできませんobject

最善の策は、ある種のDOM(など)を使用XmlDocumentXElementてデータを読み取ることですが、おそらくにデータを入力しDataTableます。私はDataTable通常のコードの大ファンではありませんが、それは存在し、このシナリオにうまく適合します。

XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
DataTable table = new DataTable();
foreach(XmlElement child in doc.DocumentElement.SelectNodes("column"))
{
    table.Columns.Add(child.InnerText, ParseType(child.GetAttribute("Type")));
}
....
static Type ParseType(string type)
{
    switch(type)
    {
        case "String": return typeof(string);
        case "Int32": return typeof(int);
        default: throw new NotSupportedException(type ?? "(null)");
    }
}
于 2012-07-03T06:44:21.207 に答える
-1

最初に Student というクラスを作成し、それをシリアライズ可能にしてから、Name と Age の 2 つのプロパティを追加します。

次に、xmlをこの関数にフィードします

public static Object XMLStringToObject(string xml, Type objectType)
{
    object obj = null;
    XmlSerializer ser = null;
    StringReader stringReader = null;
    XmlTextReader xmlReader = null;
    try
    {
        ser = new XmlSerializer(objectType);
        stringReader = new StringReader(xml);
        xmlReader = new XmlTextReader(stringReader);
        obj = ser.Deserialize(xmlReader);
    }
    catch
    {
        //Do nothing for now
    }
    finally
    {
        xmlReader.Close();
        stringReader.Close();
    }
    return obj;
}

より小さなシリアル化関数がありますが、これは yr オブジェクトをシリアル化する方法を簡単に示すためのものです。通常は次を使用しますXMLStringToObject<T>

于 2012-07-03T06:48:02.890 に答える