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; }
}