假设我在数据库中有一个表值和类型作为varchar(字符串)的实体,我将如何在C#中加载这些值转换为表中指定的类型?我打算保存Type值的getType结果。
答案 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;
}
}