使用SQLite库,我可以创建一个类
namespace MyApp
{
[Table("mydatatable")]
public class MyData
{
[PrimaryKey, AutoIncrement, Column("_id")]
public int ID { get; set; }
[Unique, NotNull]
public Guid GUID { get; set; }
[MaxLength(256), NotNull]
public string Name { get; set; }
[NotNull]
public DateTime Created { get; set; }
public int MyNumber { get; set; }
}
}
然后我可以创建一个像
这样的数据库类namespace MyApp
{
public class SQLiteDatabase
{
protected SQLiteConnection conn;
public SQLiteDatabase()
{
}
public void Attach(string dbName)
{
conn = new SQLiteConnection(dbName);
}
public void CreateTable<T>()
{
conn.CreateTable<T>();
}
public int Insert(Object T)
{
return conn.Insert(T);
}
}
}
这一切都很精彩,使得使用SQLite非常容易。但是,如何编写自己的代码来做一些与众不同的事情呢?例如,不是将数据写入SQLite数据库,而是说我想转换MyApp实例并通过nework发送它。
namespace MyApp
{
public class MyDatabaseHandler
{
public void CreateTable<T>()
{
// How do I get the table name "mydatatable"?
// How do I get the column names and types?
// Once I get that information, I can send a POST to my server and create a table on the backend
}
public int Insert(Object T)
{
// How do I get the table name "mydatatable"?
// How do I get the column names and values of each data member?
// Once I get that information, I can send a POST to my server and insert the record.
}
}
}
答案 0 :(得分:0)
https://msdn.microsoft.com/en-us/library/ms973893.aspx?f=255&MSPPError=-2147217396
查看.Net中的序列化
您可以将类转换为XML文件,然后通过网络传递XML文件,并将它们加载到您的班级的新位置。
此外,您可以考虑使用TCP,但无论您是否需要将数据转换为某种类型的序列化类。
答案 1 :(得分:0)
我认为你需要使用反射。试试这段代码:
public class MyDatabaseHandler
{
public void CreateTable<T>()
{
// How do I get the table name "mydatatable"?
var type = typeof(T);
var tableAttribute = (TableAttribute)type.GetCustomAttributes(typeof(TableAttribute), inherit: false).FirstOrDefault();
var tableName = tableAttribute?.Name;
// How do I get the column names and types?
var columns = type.GetProperties()
.Select(p => new {type = p.PropertyType, name = p.Name })
.ToArray();
}
public int Insert(Object T)
{
var type = T.GetType();
// see previous method
}
}