3

私はこのコードを持っています:

private object DeserialiseFromXMLFile(string fileLocation, Type type)
{
    XmlSerializer serializer = new
        XmlSerializer(type);

    FileStream fs = new FileStream(fileLocation, FileMode.Open);
    XmlReader reader = new XmlTextReader(fs);
    return serializer.Deserialize(reader);
}

戻り値の型を T にしたいので、ジェネリックを使用するかどうか疑問に思っています

これが可能かどうか、またはこれが最もエレガントなソリューションかどうかは誰にもわかりませんか?

前もって感謝します

4

4 に答える 4

6
private T DeserialiseFromXMLFile<T>(string fileLocation)
{
    XmlSerializer serializer = new
        XmlSerializer(typeof(T));

    FileStream fs = new FileStream(fileLocation, FileMode.Open);
    XmlReader reader = new XmlTextReader(fs);
    return (T)serializer.Deserialize(reader);
}

その後、そのように呼び出すことができます:

User item = DeserialiseFromXMLFile<User>("myFile.xml");
于 2013-04-12T16:02:12.397 に答える
1

できるよ:

private T DeserialiseFromXMLFile<T>(string fileLocation)
{
    XmlSerializer serializer = new
        XmlSerializer(typeof(T));

    FileStream fs = new FileStream(fileLocation, FileMode.Open);
    XmlReader reader = new XmlTextReader(fs);
    return (T)serializer.Deserialize(reader);
}

型のインスタンスをtypeof(T)返します。最後に、シリアライザーによって返されたオブジェクトを明示的にキャストします。TypeTT

于 2013-04-12T16:02:21.337 に答える
1
    private static T DeserialiseFromXMLFile<T>(string fileLocation)        {
        XmlSerializer serializer = new XmlSerializer(typeof(T));

        FileStream fs = new FileStream(fileLocation, FileMode.Open);
        XmlReader reader = new XmlTextReader(fs);

        return (T)serializer.Deserialize(reader);
    }
于 2013-04-12T16:03:05.407 に答える
1

このようなものをお探しですか?

private T DeserialiseFromXMLFile<T>(string fileLocation)
{
    XmlSerializer serializer = new
        XmlSerializer(typeof(T));

    FileStream fs = new FileStream(fileLocation, FileMode.Open);
    XmlReader reader = new XmlTextReader(fs);
    return (T) serializer.Deserialize(reader);
}

使用法は次のとおりです。

var foo = DeserialiseFromXMLFile<Foo>("Foo.xml");

明示的に指定する必要がない場合はFoo、メソッドを次のように変更できます

private void DeserialiseFromXMLFile<T>(string fileLocation, out T t)
{
    ...
    t = (T) serializer.Deserialize(reader);
}

あなたが呼ぶだろう

Foo foo;
DeserialiseFromXMLFile("Foo.xml", out foo);

あなたのコードは、以下を使用することもできますusing:

private T DeserialiseFromXMLFile<T>(string fileLocation)
{
    var serializer = new XmlSerializer(typeof(T));

    using (var fs = new FileStream(fileLocation, FileMode.Open))
    {
       var reader = new XmlTextReader(fs);
       return (T) serializer.Deserialize(reader);
    }
}
于 2013-04-12T16:03:06.997 に答える