Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用实体框架核心以JSON字符串形式存储和检索数据?_C#_Json_Entity Framework_Entity Framework Core_Entity - Fatal编程技术网

C# 使用实体框架核心以JSON字符串形式存储和检索数据?

C# 使用实体框架核心以JSON字符串形式存储和检索数据?,c#,json,entity-framework,entity-framework-core,entity,C#,Json,Entity Framework,Entity Framework Core,Entity,我正在尝试将对象存储为JSON。然后,使用C#将其从JSON字符串转换回实体框架核心3的对象 我有以下两个模型类: public class A { public int Id { get; set; } // more properties // I want to store the data as json. public CustomObject Object { get; set; } } public class CustomObject

我正在尝试将对象存储为JSON。然后,使用C#将其从JSON字符串转换回实体框架核心3的对象

我有以下两个模型类:

public class A
{    
    public int Id { get; set; }

    // more properties

    // I want to store the data as json.
    public CustomObject Object { get; set; }
}

public class CustomObject
{
    public int? Id { get; set; }
    public int[] ItemIds { get; set; }
    public string Value { get; set; }
}
然后在我的
DbContext
中添加了以下内容

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Entity<A>.Property(x => x.Object).HasConversion(
         v => JsonConvert.SerializeObject(v, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }),
         v => JsonConvert.DeserializeObject<T>(v, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore })
            );
}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
基于模型创建(modelBuilder);
modelBuilder.Entity.Property(x=>x.Object).HasConversion(
v=>JsonConvert.SerializeObject(v,新的JsonSerializerSettings{NullValueHandling=NullValueHandling.Ignore}),
v=>JsonConvert.DeserializeObject(v,新的JsonSerializerSettings{NullValueHandling=NullValueHandling.Ignore})
);
}
但是,当应用程序运行时,我得到以下错误

System.InvalidOperationException:'无法映射属性'Object.ItemId',因为它的类型为'int[],而该类型不是受支持的基元类型或有效的实体类型。显式映射此属性,或使用“[NotMapped]”属性或使用“OnModelCreating”中的“EntityTypeBuilder.ignore”忽略它

当我尝试在这样的泛型类中设置实体时,就会发生此错误

Repository = context.Set<A>();
Repository=context.Set();

如何正确地将JSON字符串转换为对象,并将对象转换回具有实体框架核心的JSON字符串?

问题在于默认情况下EF添加了复杂类型“或这些行周围的内容”。为了忽略它,我添加了以下内容,它成功了

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Ignore<CustomObject>();
    // ...
}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
基于模型创建(modelBuilder);
Ignore();
// ...
}

问题在于默认情况下,EF添加了复杂类型“或这些行周围的内容”。为了忽略它,我添加了以下内容,它成功了

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Ignore<CustomObject>();
    // ...
}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
基于模型创建(modelBuilder);
Ignore();
// ...
}

您能包含导致引发异常的语句吗?@devNull我更新了问题以显示在哪里。它发生在调用
context.Set()
时。您的上下文中没有一个
DbSet
,是吗?我没有。我在DBContextName中列出了DbSet。您是否可以包括导致引发该异常的语句?@devNull我更新了问题以显示在何处。它发生在调用
context.Set()
时。您的上下文中没有一个
DbSet
,是吗?我没有。我在DbContext中列出了DbSet