当前位置:  开发笔记 > 编程语言 > 正文

如何在ASP.NET Web API上获取对象?

如何解决《如何在ASP.NETWebAPI上获取对象?》经验,为你挑选了1个好方法。

这是我的Web API,它运行正常,我的意思是当我在浏览器上输入此URL时:

http://localhost:18207/api/values/GetMyClass

我检索这个结果:


a
b

我的代码:

public class MyClass
{
    public MyClass()
    {
        this.A = "a";
        this.b = "b";
    }
    public string A { get; set; }
    public string b { get; set; }
}


public class ValuesController : ApiController
{
    public MyClass GetMyClass()
    {
        return new MyClass();
    }
}

我有另一个控制台应用程序来使用我的Web API并想知道,我如何拥有MyClass的复杂或对象类型?

我的控制台上的代码如下,但它返回字符串类型

 static void Main(string[] args)
    {
        var cts = new CancellationTokenSource();
        MainAsync(args, cts.Token).Wait();
    }

    static async Task MainAsync(string[] args, CancellationToken token)
    {
        string baseAddress = "http://localhost:18207/api/values/GetMyClass";

        using (var httpClient = new HttpClient())
        {
            string response = await httpClient.GetStringAsync(baseAddress);
        }
    }

mason.. 8

您的响应可能是作为JSON进入您的控制台应用程序(您的浏览器接收它作为XML的原因是因为不同的Accept标头,如果您查看内容协商,您可以了解这一点).所以你需要做的就是解析JSON并将它反序列化到你的对象中.有很多库可以帮到你.

首先确保MyClass在Web库项目和Console项目引用的类库项目中定义了您的项目.这允许我们重用类定义,而无需在两个项目中都有单独的副本.

接下来,您需要一个JSON解析库.有一个内置于.NET,但有一个名为Json.NET的第三方是黄金标准.我的回答将使用那个,因为我对它更熟悉.将Newtonsoft.Json包安装到您的控制台应用程序中.

然后,按如下方式更改控制台应用程序:

using Newtonsoft.Json; // at the top of your file

static void Main(string[] args)
{
    var cts = new CancellationTokenSource();
    MainAsync(args, cts.Token).Wait();
}

static async Task MainAsync(string[] args, CancellationToken token)
{
    string baseAddress = "http://localhost:18207/api/values/GetMyClass";

    using (var httpClient = new HttpClient())
    {
        string json = await httpClient.GetStringAsync(baseAddress);
        MyClass instance = JsonConvert.DeserializeObject(json);
    }
}

JsonConvert类处理序列化和反序列化JSON的.反序列化时,我们只告诉要反序列化的类,它将尝试将JSON转换为该类的实例并返回它.



1> mason..:

您的响应可能是作为JSON进入您的控制台应用程序(您的浏览器接收它作为XML的原因是因为不同的Accept标头,如果您查看内容协商,您可以了解这一点).所以你需要做的就是解析JSON并将它反序列化到你的对象中.有很多库可以帮到你.

首先确保MyClass在Web库项目和Console项目引用的类库项目中定义了您的项目.这允许我们重用类定义,而无需在两个项目中都有单独的副本.

接下来,您需要一个JSON解析库.有一个内置于.NET,但有一个名为Json.NET的第三方是黄金标准.我的回答将使用那个,因为我对它更熟悉.将Newtonsoft.Json包安装到您的控制台应用程序中.

然后,按如下方式更改控制台应用程序:

using Newtonsoft.Json; // at the top of your file

static void Main(string[] args)
{
    var cts = new CancellationTokenSource();
    MainAsync(args, cts.Token).Wait();
}

static async Task MainAsync(string[] args, CancellationToken token)
{
    string baseAddress = "http://localhost:18207/api/values/GetMyClass";

    using (var httpClient = new HttpClient())
    {
        string json = await httpClient.GetStringAsync(baseAddress);
        MyClass instance = JsonConvert.DeserializeObject(json);
    }
}

JsonConvert类处理序列化和反序列化JSON的.反序列化时,我们只告诉要反序列化的类,它将尝试将JSON转换为该类的实例并返回它.

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有