2010-07-09 36 views
1

我有一個通過JSON接收復雜對象的控制器操作。該對象具有一個聲明爲抽象類型的屬性。目前,action方法從來不會被執行,因爲當JSON對象被反序列化時,它會抽象出抽象類型。我如何定製ASP.NET MVC中的JSON反序列化?

如何定製反序列化階段,以便我可以向解串器提供正確的具體類型?

public class ComplexType 
{ 
    public AbstractClass AbstractObject { get; set; } 
}  

public abstract class AbstractClass 
{  
} 

public class ConcreteClass1 : AbstractClass 
{  
} 

public class ConcreteClass2 : AbstractClass 
{  
} 

[AcceptVerbs(HttpVerbs.Post)] 
public JsonResult MyAction(ComplexType complexObject) 
{ 

    // code ... 

    return Json(myResult);   
} 

一個名爲:

$.ajax({ 
     url: myUrl, 
     data: JSON.stringify(instanceOfComplexType), 
     cache: false, 
     contentType: "application/json", 
     complete: function (data, textStatus) { 
     // handle response 
     }, 
     dataType: "json", 
     type: "POST", 
     processData: false 
     }); 
+0

您可以添加一個代碼片段,您將數據發送到操作MyAction? – Oleg 2010-07-09 09:17:48

+0

已在上面添加它。 – GiddyUpHorsey 2010-07-16 00:35:04

回答

1

最終實現了一個混凝土AbstractObject屬性的complexType的實施我寫一個ActionFilter該過程使用JSON.NET和自定義轉換器的傳入JSON。自定義Converter非常聰明,可以決定使用JSON數據來實例化它的派生類。

0

的Recieving類有永諾有具體實現。否則,解串器不能實例化對象。 並沒有其他解決你的問題。 你有兩種可能性。

無論是從基類去除抽象,

或使該(也許通過逆變或仿製藥)