2016-03-30 8 views
0

私は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; 
} 

お知らせ

値が[]ではなく{}でラップされている理由はわかりませんが、リクエストでどのように取得されるかはわかります。

答えて

0

文字列をjson配列に手動で変換することで問題を解決しましたが、それはこれを扱う "自然な"方法ではありません。したがって、配列クエリをデシリアライズするための組み込みのオプションパラメータ。ここで

は、私はそれを解決する方法である:

private IEnumerable<SortModel> GetSortModel(string sortModel) 
{ 
    if (sortModel == null) 
    { 
     return Enumerable.Empty<SortModel>(); 
    } 
    string array = $"[{sortModel}]"; 
    var deserialized = JsonConvert.DeserializeObject<List<SortModel>>(array); 
    return deserialized; 
} 
関連する問題