【问题标题】:MVC3 Convert JSON from REST Service to ModelMVC3 将 JSON 从 REST 服务转换为模型
【发布时间】:2011-12-12 21:49:19
【问题描述】:

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

这是我的控制器:

[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 以呈现我的视图?谢谢。

【问题讨论】:

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


    【解决方案1】:

    您可以将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 类的文档,让您不必担心序列化,而更多地关注您的业务逻辑。

    【讨论】:

    • 谢谢,RestSharp 做得很好。另外,AutoMapper +1,很棒的实用程序。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      您可以简单地使用JavaScriptSerializer 类的Deserialize() 方法进行反序列化

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

      【讨论】:

        猜你喜欢
        • 2016-08-19
        • 1970-01-01
        • 1970-01-01
        • 2017-01-10
        • 2012-05-27
        • 1970-01-01
        • 1970-01-01
        • 2015-05-18
        • 2023-03-17
        相关资源
        最近更新 更多