如何将返回JSON的ASP.NET WebAPI调用转换为列表?

时间:2016-08-20 10:28:20

标签: c# asp.net json asp.net-web-api

在我的服务器上,我尝试了这个测试代码:

    [AllowAnonymous]
    [Route("GetX")]
    public IQueryable<Phrase> GetX()
    {
        var phrases = new List<PhraseX>
        {
            new PhraseX() {Keyword="abc", Translation1="abc1", Translation2="abc2" },
            new PhraseX() {Keyword="def", Translation1="def1", Translation2="def2" },
            new PhraseX() {Keyword="ghi", Translation1="ghi1", Translation2="ghi2" },

        };
        return db.Phrases;
    }

这是我到目前为止在客户端上的终端应用程序:

var request = HttpWebRequest.Create("http://www.example.com/api/Phrase/GetX");
        request.ContentType = "application/json";
        request.Method = "GET";

        using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
        {

我收到了预期的数据,但现在我不知道如何才能将json返回的数据恢复到列表中?有关如何做到这一点的任何建议?

2 个答案:

答案 0 :(得分:2)

您需要反序列化 JSON到C#对象。

这些链接可以帮助您:
https://msdn.microsoft.com/en-us/library/bb412179(v=vs.110).aspx http://www.newtonsoft.com/json/help/html/deserializeobject.htm

您可以这样做:

string jsonStr = "[{Keyword:\"abc\", Translation1:\"abc1\", Translation2:\"abc2\" },{Keyword:\"def\", Translation1:\"def1\", Translation2:\"def2\" },{Keyword:\"ghi\", Translation1:\"ghi1\", Translation2:\"ghi2\" }]";

JavaScriptSerializer jss = new JavaScriptSerializer();
List<PhraseX> phrases = jss.Deserialize<List<PhraseX>>(jsonStr);  

其中PhraseX是一个类

public class PhraseX
{
    public string Keyword { get; set; }
    public string Translation1 { get; set; }
    public string Translation2 { get; set; }
}  

注意:您会在JavaScriptSerializer中找到System.Web.Extensions.dll课程 您也可以使用JSON.NET进行相同的操作。

希望它有所帮助。

答案 1 :(得分:0)

您可以将JSON反序列化为C#对象,如上一个答案中所述。

使用Json.NETNewtonsoft.Json命名空间),您可以将JSON数据传递给JsonConvert.DeserializeObject<T>(json_data)方法,T是JSON应反序列化的数据类型, json_data显然是您收到的JSON数据。如果您不想在解决方案中引入第三方依赖项,您显然也可以使用内置JavaScriptSerializer

Visual Studio为您提供了一种为JSON创建C#类的简便方法,请查看我的答案herehere