私はdotnetコアフレームワークを持つMVC6プロジェクトのREST APIを持っています。 私は、次のGETリクエストを取得配列 にいくつかのクエリパラメータをデシリアライズしようとしています:Primitives.StringValues - 配列に配列のように見える値を逆シリアル化する方法
http://localhost:53384/api/things?sortModel=%7B%22colId%22:%22arrivalDate%22,%22sort%22:%22asc%22%7D&sortModel=%7B%22colId%22:%22arrivalPortCode%22,%22sort%22:%22desc%22%7D
ソートモデルは、キーを含む配列(列Id)の値(「ASC」または「DESC」であります)ペアと私は、このクエリパラメータを持つようにしようとしていますがList<SortModel>
ビーイングに変換:
IReadableStringCollection paramsCollection = Request.Query;
0123:コントローラで
public class SortModel
{
public string ColId { get; set; }
public string Sort { get; set; }
}
、私は、クエリのparamを抽出することができます
しかし、私はこの方法が動作する必要があります。 {{"colId":"arrivalDate","sort":"asc"},{"colId":"arrivalPortCode","sort":"desc"}}
:そのキーのparamsCollection値は以下の値を持つMicrosoft.Extensions.Primitives.StringValues
のようですが、sortModel文字列が[]
でも{}
でラップされていないことを
IEnumerable<SortModel> sortModel = GetSortModel(paramsCollection["sortModel");
private IEnumerable<SortModel> GetSortModel(string sortModel)
{
// the sortModel string looks like this: "{\"colId\":\"arrivalDate\",\"sort\":\"asc\"},{\"colId\":\"arrivalPortCode\",\"sort\":\"desc\"}"
var deserialized = JsonConvert.DeserializeObject<List<SortModel>>(sortModel); //this throws an exception but the exception itself is null
return deserialized;
}
お知らせ
値が[]
ではなく{}
でラップされている理由はわかりませんが、リクエストでどのように取得されるかはわかります。