MVC 3 Web サイトに次のスニペットがあります。
モデル:
public class Item1
{
[Display(Name = "Family name")]
public string FamilyName { get; set; }
[Display(Name = "Given name")]
public string GivenName { get; set; }
}
コントローラーの方法:
public string SaveAsIs(string form_section11)
{
// method 1 works
var viewModel = new JavaScriptSerializer().Deserialize<IDictionary<string, object>>(form_section11);
// method 2 gives empty viewModel2
var viewModel2 = new JavaScriptSerializer().Deserialize<Item1>(form_section11);
// method 3 gives empty item1
Mapper.CreateMap<IDictionary<string, object>, Item1>();
Item1 item1 = Mapper.Map<IDictionary<string, object>, Item1>(viewModel);
}
そして、私が返信している値は、私のモデルを表す JSON.stringified 構造です。文字列 (読みやすいようにレイアウトされています) は次のように表示されます。
"{
\"item1.FamilyName\":\"Smith\",
\"item1.GivenName\":\"Jane\"
}"
私がやりたいことは、文字列化された JSON を自分のモデルに変換することですが、上記の 2 つの試行を超えて行う方法や、独自のシリアライザーを作成する方法がわかりません:-(
他のすべては正常に動作します。誰でも他のアイデアを思いつきました。ありがとう。
更新 1
Darin のおかげで、上記のようitem1.
に使用する前に削除するという部分的な解決策がありJavaScriptSerializer
ます。奇妙なのは item1 です。強く型付けされたモデルを使用する場合、Razor、MVC 3 などによって追加されます。とにかく、私は今解決策を持っています - ありがとう。
更新 2
以下の Darin の質問への回答として、Item1 は私のモデルの 1 つのエンティティです。モデルは次のようになります。
public class ItemModel
{
public Item1 item1 {get; set;}
public Item2 item2 {get; set;}
}
ビューは@model ItemModel
、フィールドを as として使用し@Html.EditorFor(m => m.item1.FamilyName)
ます。2 つのエンティティは同じ画面上で異なる形式になっており、次のように返しています。
var form_section1Data = JSON.stringify($("#form_section1").formParams()); //item1
var form_section1Data = JSON.stringify($("#form_section1").formParams()); //item2
Ajax 呼び出しには以下が含まれます。
data: JSON.stringify({
form_section1: form_section1Data,
form_section2: form_section2Data
}),
最初の質問を単純化しました(役立つようにしています:-))