在我的设计我有了其类型可以被继承属性的类:如何防止Json.NET使用Entity Framework代理类型名称?
public class Feed
{
...
[JsonProperty(TypeNameHandling = TypeNameHandling.Auto)]
public FeedSource Source { get; set; }
...
}
public abstract class FeedSource { ... }
public class CsvSource : FeedSource { ... }
public class DbSource : FeedSource { ... }
我使用实体框架加载这个对象存储到数据库中,我使用JSON。 NET将此对象序列化为JSON以供进一步处理。
我偶然发现的问题是$type
属性包含EF代理的类型名称而不是“真实”类型名称。因此,而不是:
$type: "System.Data.Entity.DynamicProxies.CsvSource_0B3579D9BE67D7EE83EEBDDBFA269439AFC6E1122A59B4BB81EB1F0147C7EE12"
这是毫无意义的其他客户,我想获得:
$type: "MyNamespace.CsvSource"
在我的JSON
。
达到此目的的最佳方法是什么?
是禁止使用/创建代理对象这个代码路径的选项? EF的只读/急切使用似乎并不需要它AFAICT? –
避免代理生成(或通过将'ProxyCreationEnabled'设置为false来禁用它)可能是在某些情况下适用的一种策略。但是,在其他情况下,这是不适用的,我的问题仍然存在。 – Dejan
[Serialization of Entity Framework objects with One to Many Relationship](http://stackoverflow.com/questions/13077328/serialization-of-entity-framework-objects-with-one-to-many-relationship) –