entity-framework - 如何防止Json.NET使用 Entity Framework 代理类型名称?

标签 entity-framework json.net

在我的设计中,我有一个类,其类具有可从其继承的类型的属性:

public class Feed
{
    ...
    [JsonProperty(TypeNameHandling = TypeNameHandling.Auto)]
    public FeedSource Source { get; set; }
    ...
}

public abstract class FeedSource { ... }

public class CsvSource : FeedSource { ... }

public class DbSource : FeedSource { ... }

我正在使用Entity Framework将对象加载并存储到数据库中,并且正在使用Json.NET将该对象序列化为JSON以进行进一步处理。

我偶然发现的问题是$type属性包含EF代理的类型名称,而不是“真实”类型名称。因此,而不是:
$type: "System.Data.Entity.DynamicProxies.CsvSource_0B3579D9BE67D7EE83EEBDDBFA269439AFC6E1122A59B4BB81EB1F0147C7EE12"

这对其他客户毫无意义,我想得到:
$type: "MyNamespace.CsvSource"

在我的JSON中。

实现此目标的最佳方法是什么?

最佳答案

您可以做两件事:

  • 通过将ProxyCreationEnabled设置为false来禁用跟踪代理。您可以在上下文的Configuration属性中找到此属性。如果将上下文用于单个GetXxx方法,则可以在不干扰其他实例实例的情况下进行操作。
  • 恢复实体时,使用AsNoTracking()扩展方法
  • ,如下所示:
    MyContext.MyTable.AsNoTracking(). // rest of the query here

  • 这表明您不需要您的实体的跟踪代理,因此将获得实体类。这不影响上述配置。

    关于entity-framework - 如何防止Json.NET使用 Entity Framework 代理类型名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24082059/

    相关文章:

    c# - 结果未知的 PostAsJsonAsync

    c# - 第三方类型的 Json.NET 自定义序列化/反序列化

    c# - 将 Iso8601TimeSpanConverter 添加到 JsonConverter 列表会抛出 ArrayTypeMismatch 异常

    linq - Entity Framework 4 生成的查询正在连接完整的表

    mysql - asp.net Identity 2.0的Extent用户表

    c# - 如何从动态 Entity Framework 存储过程返回表格字符串数据?

    c# - Xamarin iOS 项目中的 Newtonsoft.Json 反序列化对象

    c# - Json 反序列化 - 如何将剩余项目添加到字典中?

    c# - 运行时错误:LINQ to Entities无法识别“User.IsInRole()”上的方法

    sql-server - 回滚 Entity Framework 事务后,缓存项仍然存在