2011-12-12 46 views
0

我想實現一個遠程REST服務,該服務用於處理我的MVC3 Web應用程序的所有邏輯,至此我能夠從Web服務中檢索序列化對象,但是我我堅持反序列化對象到我的ViewModel傳遞給視圖。MVC3將JSON從REST服務轉換爲模型

這裏是我的控制器:

[HttpGet] 
public ActionResult Index() 
{ 
    string versions; 
    using (var webClient = new WebClient()) 
    { 
     versions = webClient.DownloadString("http://myservice/GetVersions"); 
    } 

    // deserialize JSON/XML somehow... 
    //IEnumerable<VersionViewModel> model = ? 

    return View(model); 
} 

什麼我需要做的,我從web服務收到的JSON轉換成視圖模型來呈現我的看法?謝謝。

回答

1

一個CodePlex項目,您可以使用RestSharp初始請求,這應該能夠自動將JSON轉換成合適的數據傳輸對象(DTO)。從那裏,你可以使用類似AutoMapper的東西從DTO - > ViewModel類轉換。

的DTO(不知道你的JSON看起來像什麼,當然):

public class VersionDto 
{ 
    public string Name { get; set; } 
    public string Version { get; set; } 
} 

最後的結果是這樣的:

[HttpGet] 
public ActionResult Index() 
{ 
    var client = new RestClient ("http://myservice"); 
    List<VersionDto> versions = client.Execute<List<VersionDto>> (new RestRequest ("/GetVersions")); 

    var vms = Mapper.Map<IEnumerable<VersionDto>, IEnumerable<VersionViewModel>> (versions); 

    return View(vms); 
} 

的RestSharp wiki有大量的文檔對如何映射將JSON引入您的DTO類,讓您不必擔心序列化問題,並且更關注業務邏輯。

+0

致謝Deserialize()方法反序列化,RestSharp制定了很大的。另外,爲AutoMapper +1,真棒實用程序。 – shuniar

0

只需使用XmlSerializer或JsonSerializer並將結果字符串轉換爲對象即可。如果你谷歌這兩個條款之一,你會得到很多點擊,因爲它真的很常見。甚至有一個JSON http://json.codeplex.com/

0

你可以簡單地用JavaScriptSerializer

JavaScriptSerializer jss = new JavaScriptSerializer(); 
var versions = jss.Deserialize<IEnumerable<VersionViewModel>>(versions); 
return View(versions);