2012-05-01 11 views
1

私はAJAX.NETとC#ASP.NETを使用していますAjaxから戻ってくるキャスティングオブジェクト

My Soldierクラスは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を兵士に変換できないと言います。あらゆるタイプのセーブメソッドを十数個作成したくないので、これを回避する方法はありますか?あなたからの助けがあれば大いに感謝します。

+0

兵士としての私のメソッドの戻り値の型になるだろう。それに応じてクラス構造を作成する必要があります。 –

答えて

0

あなたができることはそれです。

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

右そこにあなたの問題です

"マイソルジャークラスはPersonクラスのタイプです"。 Personは基本クラスであるため、子クラスSoldierにキャストすることはできません。

PersonクラスにSoldierという変換関数を記述し、そのプロパティを個別に設定する必要があります。

+0

私はこれを試みた: '[WebMethod属性、ScriptMethod] パブリック静的ボイドsavePerson(辞書<文字列、オブジェクト> dictObj) {兵士兵士=(兵士)dictObj [ "兵士"]。 } 「 」しかし、驚くべきことにはどちらも機能しません。どういうわけか、オブジェクトは辞書オブジェクトとしても入力されます。 – Johnny

+0

既存の直接変換がないので、それを行うことはできません。単に 'Person'を取り戻すためにそれを元に戻してから、' Soldier soldier = new Soldier {property = person.property //すべてのプロパティに対してこれを行います}; ' – mattytommo

0

PersonクラスからSoldierクラスを作成したと思います。あなたのメソッドの戻り値の型は、基底クラスであるPersonクラスです。 基本クラスは、子クラスのすべての属性を持つわけではありません。しかし、子クラスはその親のすべての属性を持ちます。

理想的には、私はあなたがSoldierオブジェクトを返している、私は、これはAJAXの問題をaintの

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

ですから、私が10種類のPersonを持っていれば、このような10のメソッドを作成しなければなりません。 – Johnny

+0

@Johnny:はい、OOPSのコアコンセプトの1つであるメソッドオーバーライドを実行する必要があります。 'Get'メソッドを持ち、それを派生クラスでオーバーライドします。 – Shyju

関連する問題