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

mot*_*deh 5 c# asp.net asp.net-web-api asp.net-web-api2

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

http://localhost:18207/api/values/GetMyClass
Run Code Online (Sandbox Code Playgroud)

我检索这个结果:

<MyClass>
<A>a</A>
<b>b</b>
</MyClass>
Run Code Online (Sandbox Code Playgroud)

我的代码:

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

我有另一个控制台应用程序来使用我的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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

mas*_*son 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<MyClass>(json);
    }
}
Run Code Online (Sandbox Code Playgroud)

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