SisoDb 依赖于 ServiceStack.Text 的高性能和出色的序列化框架,我的第一个测试是查看它是否可以序列化 a FileInfo
,而这StackOverFlowException
似乎是生成的地方。您可以通过使用SisoDb.Serialization
(ServiceStack.Text 的副本)或直接使用 ServiceStack.Text 来尝试此操作。
var json = info.ToJson();
截至目前InsertAs<T>
需要T
是一个接口。Insert<T>
并且InsertMany<T>
可以处理接口,但也需要实际的item来实现接口。
所以到目前为止,为了进一步:
1)用IFileData
.
public class FileData
{
public Guid Id { get; set; }
public string DirectoryName { get; set; }
public long Length { get; set; }
public string Name { get; set; }
}
2)通常应该没问题,但是由于FileInfo
无法序列化为JSON,因此您需要:
a)告诉 ServiceStack 序列化程序(包含在 SisoDb.Serialization 中)不要包含导致反序列化问题的属性:
JsConfig<FileInfo>.ExcludePropertyNames = new[]{"Directory"};
b)或者你可以做FileData
wrap aFileInfo
c)或者您可以制作一个自定义包装器FileInfo2
来包装FileInfo
.
class Program
{
static void Main(string[] args)
{
var db = @"Data Source=D:\Temp\sisotest.sdf".CreateSqlCe4Db();
db.EnsureNewDatabase();
var info = new FileInfo2(@"D:\Temp\test.txt");
db.UseOnceTo().InsertAs<FileData>(info);
}
}
public class FileInfo2
{
public FileInfo2(string cConfigSys)
{
var f = new FileInfo(cConfigSys);
DirectoryName = f.DirectoryName;
Length = f.Length;
Name = f.Name;
}
public string DirectoryName { get; private set; }
public long Length { get; private set; }
public string Name { get; private set; }
}
public class FileData
{
public Guid Id { get; set; }
public string DirectoryName { get; set; }
public long Length { get; set; }
public string Name { get; set; }
}