私はUWPアプリケーションでefコアデータベースを使用しており、Newtonsoft JSONでリストを含むリストをシリアライズする際にいくつかの問題があります。最小限例えばNewtonsoft JSON list in serialize list
私は今、いくつかのデータを次のようにシリアライズしたい場合は、次のコード
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; }
public List<Post> Post { get; set; }
}
public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public int BlogId { get; set; }
public Blog Blog { get; set; }
}
public class BloggingContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("Filename=minexample.db");
}
}
でmicrosoftからUWPチュートリアルを考えてみます。
using (var db = new BloggingContext())
{
var dbPost = db.Blogs.Include(x => x.Post).ToList();
var serialized = JSONClass.Serialize(dbPost);
}
を私はタイプのエラーが出ますSystem.StackOverflowException
をmscorlib.ni.dll
に入力すると無限ループになります。コメントに記載されているユーザーのアラインのように、ReferenceLoopHandling
〜ReferenceLoopHandling.Ignore
をJsonSerializerSettings
に設定することでこの現象を修正できます。
ブログをシリアル化するときにList<Post>
の代わりにList<int>
というだけで各ポストのID
を保存することをお勧めします。
データベースが指定されている場合、なぜシリアル化されますか?私は特定のデータベースエントリを共有し、それらをシリアル化する必要があります。また、私はOneDrive
との同期のためにこれを行うことを検討しているので、違うデバイス上の異なるデータベースエントリを異なる時間に編集するとき(一人のユーザ)には衝突はありません。
JsonSerializerSettings、referenceloophandling = HTTPを無視://www.newtonsoftを。 com/json/help/html/T_Newtonsoft_Json_ReferenceLoopHandling.htm – alanh
うわー、私は 'JsonSerializerSettings'を試していましたが、' ReferenceLoopHandling.Serialize'を使っていました。だから私はすべてを連載することができます。 'PostId'を投稿のエイリアスとしてシリアライズする方法もありますか? – user3079834
@ user3079834 - 最新のコメントで説明したように、新しい要件を説明するために質問を編集できますか? – dbc