2011-12-12 72 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);