MVC3将JSON从REST服务转换为模型

时间:2011-12-12 21:49:19

标签: json web-services asp.net-mvc-3 rest

我正在尝试实现远程REST服务,该服务用于处理我的MVC3 Web应用程序的所有逻辑,到目前为止,我能够从Web服务中检索序列化对象,但我仍然坚持将对象反序列化为我的ViewModel传递给View。

这是我的控制器:

[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转换为ViewModel来呈现我的视图?感谢。

3 个答案:

答案 0 :(得分:1)

您可以使用RestSharp作为初始请求,该请求应该能够自动将JSON转换为合适的数据传输对象(DTO)。从那里,您可以使用类似AutoMapper的内容来转换自DTO - &gt; 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维基有很多关于如何将JSON映射到DTO类的文档,让您不必担心序列化,更多地关注您的业务逻辑。

答案 1 :(得分:0)

只需使用XmlSerializer或JsonSerializer并将结果字符串转换为对象。如果你谷歌这些条款中的任何一个你会得到很多点击,因为它真的很常见。甚至还有一个JSON http://json.codeplex.com/

的codeplex项目

答案 2 :(得分:0)

您可以使用JavaScriptSerializer

Deserialize()方法进行反序列化
JavaScriptSerializer jss = new JavaScriptSerializer();
var versions = jss.Deserialize<IEnumerable<VersionViewModel>>(versions);
return View(versions);