2016-03-30 12 views
0

dotnet çekirdek çerçeve ile MVC6 projesi ile bir REST api var. Ben bir diziye içine bazı sorgu parametrelerini serisini çalışıyorum aşağıdaki GET isteği olsun:Primitives.StringValues ​​- bir dizi içine bir diziye benzeyen değeri nasıl deserialize nasıl

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 

sıralama modeli anahtar (sütun id) değeri ("asc" veya "desc" içeren bir dizidir) çifti ve bu sorgu parametresini için çalışıyorum bir List<SortModel> varlık dönüştürüldü:

IReadableStringCollection paramsCollection = Request.Query; 
0123: kontrol de

public class SortModel 
{ 
    public string ColId { get; set; } 
    public string Sort { get; set; } 
} 

, beraber sorgu parametresi ayıklamak

Ama sonra çalışmak için bu yöntemi gerekir:

sortModel dize bu anahtarın paramsCollection değeri aşağıdaki değere sahip bir Microsoft.Extensions.Primitives.StringValues gibi görünüyor olsa da [] ile ne de {} ile sarılmış olmadığını
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; 
} 

Uyarı: {{"colId":"arrivalDate","sort":"asc"},{"colId":"arrivalPortCode","sort":"desc"}}

Değerin neden yerine [] ile tamamlandığından emin değilsiniz, ancak istekte bu şekilde bulunur.

cevap

0

Dizeyi bir json dizisine dönüştürerek sorunu çözdüm, bununla uğraşmak için "doğal" bir yol gibi görünmese de, bir dizi sorgusunun seri hale getirilmesi için daha iyi yerleşik seçenekleri duymak istiyorum. parametre.

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; 
} 
: Burada

bunu çözüldü nasıl

İlgili konular