2016-04-01 17 views
2

Genellikle C# modeliyle JSON bağlanması, Web API'sinde oldukça basittir, ancak Dictionary<string, string> şaşırtıcı bir şekilde onunla çalışmak için zor buldum. Bir modele sahipWeb API 2'de Sözlük <string, string> ile hangi JSON biçimini kullanmalıyım?

, tip Bar ait bir özelliği bulunan Foo ki:

public Bar SomeProp { get; set; } 

Bar basit bir sözlük vardır:

public class Bar 
{ 
    public Dictionary<string, string> SomeDict { get; set; } 
} 

basit görünüyor ve ben nesnesi Web API bu tür aldığımda aşağıdaki JSON üretmektedir:

"SomeProp": { 
       "Bar":  
       { 
       "key": "val", 
       "key2": "val2" 
       } 
      } 

Pr arkaplan ters bir şeydir. İstekte aynı JSON'u kullanmaya çalıştığımda Web API'sı argüman modeline bağlanmaz.

Neyi yanlış yapıyorum?

+0

, geçerli bir: bir eser olarak

etrafında bir Ad ve bir Değerler özelliğine sahip, Girişleri özel bir sınıf "Menzil" oluşur Listesini kullanılan JSON, "{" SomeProp ": {" SomeDict ": {" merhaba ":" dünya "}}} olmalıdır. –

+0

Benim için işe yaramıyor, ama belki sorun benim modelimde başka bir yerde yatıyor. Test ettin mi? – Landeeyo

+0

Bir şey daha - örnek sadece bir çift içindir ve bunun nasıl daha fazla uzatılacağını göremiyorum. – Landeeyo

cevap

1

Bir veri kabını bir Sözlük olan "ExcelRanges" özelliğiyle aktarmak istedim. Sözlük için mülk olarak hedef türü olarak kullanmadım. senin tipin yapısını göz önüne alındığında

/// <summary> 
/// Container for data that should be written to an Excel file 
/// </summary> 
public class ExcelData 
{  
    public Guid Id { get; set; } 
    public List<Range> ExcelRanges { get; set; } 
} 

public class Range 
{ 
    public string Name { get; set; } 

    public List<List<object>> Values { get; set; } 
} 


[HttpPost] 
[Route("Measures")] 
public Guid Measures(ExcelData excelData) 
{ 
... 
} 

function execute(site, filteredMeasures) { 

    var excelRanges = [ 
    { 
     'Name': 'additionalInvestmentEfficiency', 
     'Values': [[1,2],[3,4]] 
    }, 
    { 
     'Name': 'totalInvestment', 
     'Values': [[10,20],[30,40]] 
    } 
    ]; 

    var data = { 
     'Id': site.siteId(), 
     'ExcelRanges': excelRanges  
    }; 

    return $.ajax({ 
     url: routeConfig.exportMeasureDataByUrl, 
     type: 'POST', 
     contentType: 'application/json', 
     processData: false, 
     data: JSON.stringify(data), 
     headers: appSecurity.getSecurityHeaders() 
    }).done(function(downloadId) { 
     window.location.href = routeConfig.exportMeasureDataByUrl + '?downloadId=' + downloadId; 
    }); 


    } 
İlgili konular