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