2017-03-05 11 views
0

Web APIプロジェクトとMassiveを使用してデータベースタスクを実行しています。 私のコントローラでは、Postメソッドが動的オブジェクトを受け入れてMassive Insertメソッドで直接使用できるようにします。Web APIメソッドでの動的パラメータの使用

public class LinkController : ApiController 
{ 
    public IHttpActionResult Post(dynamic link) 
    { 
     dynamic model = new Massive.DynamicModel("main", tableName: "Links", primaryKeyField: "Id"); 
     return Ok(model.Insert(link)); 
    } 
} 

そして、POSTで以下のJSONが送信される要求:

{ 
    "Name":"StackOverflow", 
    "Url":"http://www.stackoverflow.com", 
    "Description":"My most visited web site!", 
    "FolderId":2 
} 

私の問題はJSON.NetデシリアライズJSONs方法です。 Postメソッドが呼び出されると、linkパラメーターには4つのプロパティーがあり、 ですが、Newtonsoft.Json.Linq.JValue型であり、いくつかのプリミティブ型ではありません(Nameのexpampleストリング用ではありません)、Massiveは でJValueオブジェクトを処理できません。

パラメータを(カスタムJsonConverterを作成し、Web APIモデルのバインディングを調整することによって)そのプロパティのプリミティブ型にする必要があります。

答えて

0

あなたがExpandoObjectにあなたのDTOをデシリアライズされできる最善:あなたは、彼らは、.NET CLRタイプと通常のクラスで設計されたそれとそのプロパティにアクセスしながら、

// config.GetType() == typeof(HttpConfiguration) 
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new ExpandoObjectConverter()); 

それはまだ動的オブジェクトです。

+0

ご回答ありがとうございます。私はそれを試みましたが、残念ながら何も変わっていません –

+0

@FarzanHajianこれはこれが私のWebAPIのいくつかを設定しているので不可能です。 –

関連する問題