SisoDb は ServiceStack.Text の高性能で優れたシリアル化フレームワークに依存しており、私の最初のテストは、それが a をシリアル化できるかどうかを確認することでした。FileInfoそこでStackOverFlowExceptionが生成されるようです。SisoDb.Serializationこれは、ServiceStack.Text のコピーを使用するか、ServiceStack.Text を直接使用して試すことができます。
var json = info.ToJson();
現在のところ、インターフェイスであるInsertAs<T>必要Tがあります。Insert<T>インターフェイスをInsertMany<T>処理できますが、インターフェイスを実装するには実際のアイテムも必要です。
したがって、今のところ、さらに進めるには:
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または、ラップを作成することもできますFileInfo
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; }
}