Я использую Kendo UI, Entity Framework и AngularJS и пытаюсь сериализовать производный тип класса в сетке кендо и отправить его методу WebAPI. У меня есть последующие модели ассоциация:WebAPI - Передача JSON производного класса
class FREQ_POOL<---- Base class
class POOL_FAA:FREQ_POOL<----derived class
class FREQUENCY(Contains a FREQ_POOL object)
Я использую кендо UI с моделью следующим образом:
model: {
id: "Id",
fields: {
Frequency: { type: "string" },
FREQ_POOL: {
$type: 'DomainModelModule.POOL_FAA, DomainModelModule',
// type: "object",
defaultValue: {}
}
}
}
....
$("#FAAFreqGrid").kendoGrid({
dataSource: FAADS,
columns: [
{ field: "Frequency", editor: categoryDropDownEditor, title: "Frequency Test", format: "{0:c}", width: "120px" },
{ field: "FREQ_POOL.FAADesignator", title: "FAA Designator", format: "{0:c}", width: "120px" },
FAADesignator принадлежит к производному классу POOL_FAA. Это работает на 100% отлично, когда у меня есть созданная вручную строка в моем db. Это часть создания в коде, которая не работает.
Я использую правильный обработки в моем веб-апи конфигурации TypeName, основанный на том, что я прочитал:
var json = config.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
json.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
json.SerializerSettings.TypeNameHandling = TypeNameHandling.Auto; //THIS IS NEEDED FOR CASTING
json.SerializerSettings.TypeNameAssemblyFormat = System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Full;
config.Formatters.Remove(config.Formatters.XmlFormatter);
Сейчас я до сих пор не в состоянии бросить свою FREQ_POOL к POOL_FAA в моем методе WebAPI:
[ResponseType(typeof(FREQUENCY))]
public IHttpActionResult PostFREQUENCY([FromBody]FREQUENCY testfreq)
{
FREQUENCY ftest = new FREQUENCY();
ftest.FREQ_POOL = new POOL_FAA();
POOL_FAA sdgsdg = (POOL_FAA)ftest.FREQ_POOL;//WORKS WHEN MANUALLY CREATED
POOL_FAA pool = (POOL_FAA)testfreq.FREQ_POOL;//THROWS EXCEPTION
}
Как вы видели, я использовал тип $, чтобы установить тип, на который он должен быть наложен, но это, похоже, не работает.
я заметил, что $ типа не появляется в моем строковой JSON:
{"Id":0,"Frequency":"","FREQ_POOL":{"FAADesignator":"sdfgsfdg","DateFilled":"dfg","DueDate":"fhg","Released":"sdfh","ReleasedDate":"dsfh","Comments":"sdfh"},
Но я включаю его, так что я не знаю, почему это было бы исключить его. Это мое лучшее предположение, почему он не работает. Я использую Angular и Kendo, и поскольку моя переменная находится внутри модели кендо, я думал, что это может быть исключение типа $ или что-то в этом роде.
Любые идеи? Благодарю.