2017-12-09 9 views
0

jsonオブジェクトをビューソースの一部としてレンダリングしました。そのjsonをC#モデルオブジェクトに変換し、そのオブジェクトを部分ビューに渡したいのですが、部分ビューはモデルオブジェクトに強く型付けされているためです。JsonオブジェクトからmvcのC#モデルオブジェクトへView

Egが:

jsonIdentifier = '{"Identifier": { "name":"uno","contextId":"dos"}}' 

@{ model.Identifier = Parsing(jsonIdentifier)} 
@Html.Partial("_IdentifierPartial", m=>m.Identifier) //where Identifier is the object needs to be passed to _IdentifierPartial 
+0

これまでに何を試みましたか?あなたは* [Deserialize JSON with C#](https://stackoverflow.com/q/7895105/3744182)*を読み、テストしましたか? – dbc

+0

@dbc 'JavaScriptSerializer'は推奨されていませんが、私はそれを使用する答えを推奨しません。 –

+0

@CamiloTerevinto - 「JSONをC#でどのように非直列化するのですか?または、[JSONオブジェクトをカスタムC#オブジェクトに変換する方法](https://stackoverflow.com/q/2246694/3744182)*と* [JSONデータをJSON.NETを使用してC#にデシリアライズする](https ://stackoverflow.com/q/2546138)*代わりに? – dbc

答えて

0

あなたは、@ Html.Partialの代わりに@ Html.Actionを使用する必要があります。 jsonIdentifierを文字列パラメータとして渡し、Json.NETを使用してそれを適切な型のオブジェクトに変換します。

ように..

Output my partial with that Json: 
<div> 
    @{ 
     string json = "{Make: \"Toyota\", Model: \"Camry\", Year: 2017}"; 
    } 
    @Html.Action("RenderCarScreen", new { carJson = json }); 
</div> 

あなたのWebMethod属性は、我々は@Html.Action()@Html.Partialの助けを借りてこれを達成することができます

public ActionResult RenderCarScreen(string carJson) 
    { 

     Car car = Newtonsoft.Json.JsonConvert.DeserializeObject<Car>(carJson); 
     return PartialView("CarScreen", car); 
    } 
0

...このようになります。 @Html.Action()は、アクションメソッドを必要とし、アクションメソッドを使用して部分ページをレンダリングします。 @Html.Partial()は、ページをレンダリングするオブジェクト値に基づいて、必要なアクションメソッドではありません。したがって、@Html.Partial()は、@Html.Action()と比較してパフォーマンスが向上します。

using Newtonsoft.Json; 
@{ 
    string JsonStr = {\"user\":\"me\",\"payment_method\":\"card\",\"items_bought\":[{\"id\":\"001\",\"name\":\"desk\",\"delivered\":\"true\"},{\"id\":\"455\",\"name\":\"chair\","delivered\":\"false\"},{\"id\":\"234\",\"name\":\"mousepad\",\"delivered\":"false\"},{\"id\":\"135\",\"name\":\"cabinet\",\"delivered\":\"false\"}]} 
    var JsonObject = JsonConvert.DeserializeObject<MyJSON>(JsonStr); 
} 
<div> 
    @Html.Partial("_IdentifierPartial", JsonObject) 
</div> 

上記のコードは正常に動作し、要件を満たします。しかし、このアプローチはお勧めできません、より良いあなたはコントローラ側のモデルオブジェクトにjsonの文字列を変換し、表示するモデルオブジェクトを渡すことができます。例については

:アプローチ上記

@model ModelClass 
<div> 
    @Html.Partial("_IdentifierPartial",Model.PartialModel) 
</div> 

は、はるかに高速ブラウザでページをレンダリングしています。

関連する問題