2016-04-14 10 views
0

"Person" ADO.Netエンティティモデルを作成し、そこからWeb APIコントローラを "スキャフォールド"しました。 Entityモデルは入れ子になっていて、inは他のオブジェクトの配列を含んでいます。WebAPIパラメータnull

これらのネストされたオブジェクトには親を参照するプロパティが含まれているため、それらは直列化できません。そこで私はPersonオブジェクトとそのネストされたプロパティを(親からのネストしたオブジェクトの参照を除いて)コピーしてGETメソッドで取得できるようにするJSON_Personクラスを作成しました。

この時点までは、すべて正常に動作しました。私はAPIにGETリクエストを行い、JSONオブジェクトの配列を取得できます。各オブジェクトには、独自のネストされたオブジェクトの配列があります。 APIへのPUTリクエストを行い、レコードを更新することもできます。 PUTメソッドは(私は仮定)JSON_Personと人の性質は、パラメータを変更した後、しかし1

に1を一致させるので、それは動作しますが、「人」のオブジェクトではなく「JSON_Person」を受け付けていても

PersonからJSON_Personにタイプすると、APIのパラメータは常にnullを表示するようになりました。

おそらく「型変換に失敗しました」と言われましたが、オブジェクトをGETしてそのまま元の状態に戻しても、それでも失敗します。

物事は私が試してみた:

  1. APIパラメータに[FromBody]を追加します。
  2. jQuery.ajax呼び出しで「contentType: 'application/json; charset = utf-8'」を変更します。
  3. テストタイプの変換に送信する前に、すべてのプロパティをnullに設定します。

AJAX呼び出し方法

[ResponseType(typeof(void))] 
public IHttpActionResult PutPerson(int id, JSON_Person json_Person) 
{ 
    // Convert JSON_Person back to Person and do other stuffs... 
} 
+0

'ModelState.Errors'プロパティを確認しましたか? –

+0

ModelStateのErrorsプロパティが表示されません。 – Austneal

答えて

1

を入れ

$.ajax({ 
    type: "PUT", 
    url: "/api/person/" + selected.Id, 
    data: JSON.stringify(selected), 
    contentType: 'application/json; charset=utf-8', 
    success: function() {}, 
    error: function() { 
     return alert("error"); 
    } 
}); 

は、それがすべてでPUTメソッドの問題ではありませんでしたが判明します。 JSON_Personを受け入れるクラスにコンストラクタを追加するための部分クラスPersonを作成しましたが(JSON_PersonをPersonに変換するのを助けるため)、空のコンストラクタはありませんでした。

パラメータを必要としないコンストラクタを追加した後、機能しました。

public JSON_Person() { } 
関連する問題