2016-04-26 9 views
0

ホイールを外して再作成する前に、自動的にこれを行う方法があるかどうか誰にでも教えてください。ASP.Net Web APIに渡すフォームをシリアライズ

public class ParentViewModel { 
    public int ID { get; set; } 
    public string Title { get; set; } 

    public ChildViewModel[] Children { get; set; } 
} 


public class ChildViewModel { 
    public string Description { get; set; } 
    public int Severity { get; set; } 
} 

私は、パラメータとしてParentViewModelを取るウェブAPI関数呼んでいる:

[HttpPost] 
    public void Test([FromBody]ParentViewModel vm) { 
    } 

これを私は別のオブジェクト型の配列を含むビューモデル、このようなビットを持っています動的な数の子エンティティを持つことができるWebページから呼び出されます。ページはasp.net/Razorを使用して作成されているので、これらは、このようなHTMLと入力フィールドにバインドされています。私は、Web APIを呼び出すために、AJAXを使用してJavaScriptのイベントハンドラを持っている

<input aria-invalid="false" class="form-control" id="Children_0__Description" name="Children[0].Description" value="test" type="text"> 

。私はそれにフォームデータを渡したいので、フォームをシリアル化し、オブジェクトに変換するためにdeparamを使い、オブジェクトのJSON.stringifyを呼び出します。残念ながら、これは "Children [0] .Descriptionのようなものを私のためのオブジェクトの配列に変換しないので、Web APIにヒットするとビューモデルの配列プロパティにマップされません。

{ 
    "ID": "12", 
    "Children[0].Severity" : "3", 
    "Children[0].Description" : "Test", 
    "Children[1].Severity" : "5", 
    "Children[1].Description" : "Another", 
    "Title": "Hello" 
} 

の代わりに、このような:このよう

{ 
    "ID": "12", 
    "Children" : [ 
     {"Severity":"3", "Description":"Test"}, 
     {"Severity":"5", "Description":"Another"}, 
     ], 
    "Title": "Hello" 
} 

私は、JSONを変換するいくつかのコードを記述することを約あったが、私はどちらかの最初の場所で何か間違ったことをやっている推測しています、または私のためにこれを行う何か - 何か提案がありますか?

答えて

0

this linkにあなたと同じ問題がある場合。もしそうなら、あなたのajaxコールヘッダーにcontenttypeを追加する必要があります。

+0

ありがとうShashank。同じように聞こえるが、私の場合はすでにcontentType属性がある –

0

もっと良い方法があるかどうかはわかりませんが、私は問題を解決しました。あなたの考えを結晶化させるために他の人にあなたの問題を説明するものは何もありません。問題は、デパラムが使用するのに最適なライブラリではありませんでした。代わりに私は正確に私が必要とするthisライブラリを見つけました。

関連する問題