2016-06-21 1 views
0

JSon配列をApiControllerに渡そうとしていますが、文字列値がデシリアライズされていません(null値に設定されています)。奇妙なことは、私はまだ正しい数の要素を取得しているということです。私はそれにJSONを送信していJSONがApiControllerに渡されても文字列値が逆シリアル化されない

// POST: api/language/create 
[HttpPost] 
[Route("create")] 
public string Create([FromBody]LanguagePair[] languagePairs) 

[ 
    {"Key":"Test","Value":"Test","Version":"1.0"}, 
    {"Key":"Areyousure","Value":"Are you sure?","Version":"1.0"}, 
    {"Key":"File","Value":"File","Version":"1.0"} 
] 

そして、これは私が「クラスですが、POSTメソッドで

[RoutePrefix("api/language")] 
public class LanguagePairApiController : ApiController 

AはApiControllerを持っていますそれにマップしようとしています:

public class LanguagePair 
{ 
    public string Key { get; set; } 
    public string Value { get; set; } 
    public string Version { get; set; } 
} 

しかし、文字列値はNULLとしてを通じて来ている:

enter image description here

私は何をしないのですか?
編集:これに1つの答えを見つけ出し、下に投稿しました。しかし、私はまだ良い答えを探しています...

+0

私はasp.netについてよく分かりませんが、自動的にキャメルケースのオブジェクトプロパティが自動的にオンになるメカニズムはありませんか? '[{" key ":" win "}]'を送ってください。 –

+0

あなたの実際のjQueryは何ですか – NSGaga

答えて

2

私はそれを考え出しました。私はのDataContractを持つクラスを飾るために必要なプロパティとDataMember属性:

{ 
    [DataContract] 
    public class LanguagePair 
    { 
     [DataMember] 
     public string Key { get; set; } 
     [DataMember] 
     public string Value { get; set; } 
     [DataMember] 
     public string Version { get; set; } 
    } 
} 
+1

JSONプロパティの名前を調整する場合は(例:{"myKey": "Areyousure"、 "スペース付き疑問イベント": "本当ですか?"、 "v (DataMember(Name = "myKey")]、[DataMember(Name = "スペース付き質問イベント])]、[DataMember(Name =" v ")]を使用して、 C#のプロパティー –

1

読むParameter Binding in ASP.NET Web API

をあなたの行動から[FromBody]属性を削除する必要があります...

// POST: api/language/create 
[HttpPost] 
[Route("create")] 
public string Create(LanguagePair[] languagePairs) { ... } 

、あなたのクラスを維持することができます元気にしたようにしっかりしてください:

がリクエストボディから単純型を読み取るために[FromBody]

は、Web APIを強制的に使用して、パラメータに [FromBody]属性を追加します。

public HttpResponseMessage Post([FromBody] string name) { ... } 

をこの例では、ウェブAPIは、メディアタイプのフォーマッタを使用して、要求本体から という名前の値を読み取ります。以下は、クライアントの例です。 リクエストです。パラメータは[FromBody]を持っている場合

POST http://localhost:5076/api/values HTTP/1.1 
User-Agent: Fiddler 
Host: localhost:5076 
Content-Type: application/json 
Content-Length: 7 

"Alice" 

は、ウェブAPIは、フォーマッタを選択するために、Content-Typeの ヘッダーを使用しています。この例では、コンテンツタイプは "application/json"であり、リクエスト本文は生のJSON文字列( JSONオブジェクトではありません)です。

+1

これを試したところ、同じ結果(すべての値== nullの3つのオブジェクトの配列)が得られます。しかし、[FromBody]は何もしていません。それを削除して[DataContract]を保持すると、正しく動作します。 –

関連する問題