2015-07-23 4 views
0

Я использую 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, и поскольку моя переменная находится внутри модели кендо, я думал, что это может быть исключение типа $ или что-то в этом роде.

Любые идеи? Благодарю.

ответ

0

Когда я переключился с первой модели на кодовую, я явно не использовал наследование TPT. После перехода на TPT из наследования TPH все было решено.

Смежные вопросы