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)
您的响应可能是作为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转换为该类的实例并返回它.