Я использую базу данных ef core в своем приложении UWP и имею некоторые проблемы, связанные с сериализацией списка, содержащего список с Newtonsoft JSON.Newtonsoft JSON сериализует список в списке
Для минимального примера рассмотрит учебник UWP из microsoft со следующим кодом
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");
}
}
, когда я теперь хочу сериализацию некоторых данных следующим образом:
using (var db = new BloggingContext())
{
var dbPost = db.Blogs.Include(x => x.Post).ToList();
var serialized = JSONClass.Serialize(dbPost);
}
Я получаю сообщение об ошибке типа System.StackOverflowException
в mscorlib.ni.dll
, что я вхожу в бесконечный цикл. Как упоминалось в комментариях пользователя alanh, это поведение можно устранить установкой ReferenceLoopHandling
до ReferenceLoopHandling.Ignore
в JsonSerializerSettings
.
Я бы предпочел, чтобы просто хранить ID
каждого поста, как List<int>
вместо List<Post>
при сериализации блог.
Почему сериализация, если дана база данных? Я хочу поделиться конкретными записями базы данных и их сериализовать. Также я рассматриваю возможность сделать это для синхронизации с OneDrive
, поэтому нет столкновения при редактировании различных записей базы данных на разных устройствах в разное время (один пользователь).
JsonSerializerSettings, referenceloophandling = игнорировать HTTP: //www.newtonsoft. com/json/help/html/T_Newtonsoft_Json_ReferenceLoopHandling.htm – alanh
Вау, я тоже пытался 'JsonSerializerSettings', но с' ReferenceLoopHandling.Serialize'. Поэтому теперь я могу сериализовать все это. Есть ли способ просто сериализовать «PostId» как псевдоним для публикации? – user3079834
@ user3079834 - можете ли вы [изменить] свой вопрос, чтобы объяснить свое новое требование, как описано в последнем комментарии? – dbc