通用转换类型

时间:2011-08-01 09:00:35

标签: c# .net generics casting type-conversion

假设我在数据库中有一个表类型作为varchar(字符串)的实体,我将如何在C#中加载这些值转换为表中指定的类型?我打算保存Type值的getType结果。

4 个答案:

答案 0 :(得分:1)

value.GetType().AssemblyQualifiedName保存在Type列中,然后使用Type.GetType(asmQualfName)从数据库加载时获取类型。之后,您可以使用Activator.CreateInstance来获取正确类型的对象。

答案 1 :(得分:1)

您如何从数据库中读取? 您使用的是ADO.NET,还是使用任何类型的OR Mapper,如EF或NHibernate?在OR Mapping的情况下,您可以构建一个强类型对象,它可以定义类型...... OR映射器本身负责转换。

答案 2 :(得分:1)

您可以通过Activator.CreateInstance方法获取示例代码(与您的案例非常相似),请参阅上面链接的MSDN示例。

答案 3 :(得分:0)

当你没有使用任何OR映射器时,我宁愿构建一个简单的类,并将该类型的实例序列化为xml,并存储在数据库中的xml列中。

    using System.Xml.Serialization;

    public class MySettings
    {
    public String Setting1 { get; set; }
    public int Setting2 { get; set; }

    public String ToXml()
    {
        string settingsXml;
        var xmlSerializer = new XmlSerializer(typeof(MySettings));
        using (var stream = new MemoryStream())
        {
            xmlSerializer.Serialize(stream, this);
            stream.Position = 0;
            using(var reader = new StreamReader(stream))
            {
                settingsXml = reader.ReadToEnd();
            }
        }
        return settingsXml;
    }

    public static MySettings FromXml(string xml)
    {
        MySettings settings = null;
        using(MemoryStream stream  = new MemoryStream(System.Text.Encoding.Default.GetBytes(xml)))
        {
            XmlSerializer xmlSerializer = new XmlSerializer(typeof (MySettings));
            settings = (MySettings) xmlSerializer.Deserialize(stream);
        }
        return settings;
    }
}