W moim projekcie mam klasę, która ma właściwość, którego typ może być dziedziczone od:Jak uniemożliwić Json.NET korzystanie z nazwy typu proxy serwera 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 { ... }
Używam Entity Framework do ładowania i przechowywania tego obiektu do bazy danych i używam json. NET do serializacji tego obiektu do JSON w celu dalszego przetwarzania.
Problem, na który natrafiłem, polega na tym, że właściwość $type
zawiera nazwę pliku proxy pośredniczącego EF zamiast "rzeczywistego" typu. Więc zamiast:
$type: "System.Data.Entity.DynamicProxies.CsvSource_0B3579D9BE67D7EE83EEBDDBFA269439AFC6E1122A59B4BB81EB1F0147C7EE12"
co jest bez znaczenia dla innych klientów, chciałbym dostać:
$type: "MyNamespace.CsvSource"
w moim JSON.
Jaki jest najlepszy sposób, aby to osiągnąć?
jest wyłączenie użycia/tworzenie obiektów proxy jest opcją dla tej ścieżki kodu? Wykorzystanie EF w trybie tylko do odczytu/przydaje się do ładowania nie wydaje się, aby było to potrzebne AFAICT? –
Unikanie generowania proxy (lub wyłączanie go przez ustawienie "ProxyCreationEnabled" na false) może być jedną z strategii, która ma zastosowanie w niektórych przypadkach. Będą jednak inne przypadki, w których nie ma to zastosowania, a moje pytanie pozostaje otwarte. – Dejan
możliwy duplikat obiektów [Serializacja obiektów z jednym do wielu relacji] (http://stackoverflow.com/questions/13077328/serialization-of-entimes- frame-objects-with-one-to-many-relationship) –