2012-05-01 26 views
1

我正在使用AJAX.NET和C#ASP.NET從Ajax回來的鑄造對象

我的士兵類是一種Person類。

[WebMethod, ScriptMethod] 
public static Person getPerson(int personId) 
{ 
    return (Person)personService.getSoldier(personId); 
} 

這很好。在Ajax方面,我可以獲取並設置Soldier屬性。但是,當我發回這個對象時,我不能將它轉換回Soldier對象。

[WebMethod, ScriptMethod] 
public static Person savePerson(Person person) 
{ 
    Soldier soldier = (Soldier)person; 
} 

這失敗了。它說它不能將對象Person轉換成Soldier。有沒有解決方法,因爲我不想爲每種類型創建一打保存方法?任何你的幫助將不勝感激。

+0

這是不是AJAX的問題。你應該相應地創建類結構。 –

回答

0

你可以做的是。

Soldier soldier = new Soldier(){soldier.Prop1 = Person.CorrespondingProp;//for all the propertiese}; 
3

我的戰士類是一類Person類的」

那是你的問題就在這裏。由於Person是基類,因此它不能轉換爲子類Soldier

您需要在Person類中編寫一個Convert函數,該函數將Soldier作爲參數並單獨設置屬性。

+0

我嘗試這樣做: '[的WebMethod,ScriptMethod] 公共靜態無效savePerson(詞典<字符串,對象> dictObj) { 士兵士兵=(士兵)dictObj [ 「戰士」]; } ' 但令人驚訝的是它也不起作用。不知何故,對象也以字典對象的形式出現。 – Johnny

+0

你不能這樣做,因爲沒有現有的直接轉換,只是改回來採取一個'人',然後做'士兵士兵=新士兵{財產= person.property //對此做所有屬性};' – mattytommo

0

我想你從Person類創建Soldier類。您的方法返回類型是Person是基類的類。 基類不具有Child類的所有屬性。但是,一個孩子班將擁有其家長的所有屬性。

理想的情況下,我要返回一個Soldier對象,我會做我的方法的返回類型爲士兵

public static Soldier getPerson(int personId) 
{ 
    return personService.getSoldier(personId); 
} 
+0

所以如果我有10種不同類型的人,我必須創建10個這樣的方法? – Johnny

+0

@Johnny:是的,你應該做方法重寫這是OOPS的核心概念之一。有一個'Get'方法並在派生類中覆蓋它。 – Shyju