我正在尝试实现远程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来呈现我的视图?感谢。
答案 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);