【发布时间】:2014-08-18 22:55:48
【问题描述】:
我正在开发一个 C#/XAML Metro 应用程序,我在其中使用 JSON REST 服务。如何将 JSON 响应反序列化为文本或自定义对象?
【问题讨论】:
-
看看this
标签: json windows-8 windows-runtime windows-store-apps microsoft-metro
我正在开发一个 C#/XAML Metro 应用程序,我在其中使用 JSON REST 服务。如何将 JSON 响应反序列化为文本或自定义对象?
【问题讨论】:
标签: json windows-8 windows-runtime windows-store-apps microsoft-metro
Windows 应用商店应用 的官方 JSON API 位于 Windows.Data.Json 命名空间中:
JsonObject.Parse() 或 new JsonOject() 用于对象,它的工作方式更像是 Dictionary<TKey, TValue>。JsonArray.Parse() 或 new JsonArray() 用于数组,它的工作方式不像 List<TValue>。JsonValue.Parse()、JsonValue.CreateStringValue()、JsonValue.CreateBooleanValue() 或 JsonValue.CreateNumberValue() 用于字符串、布尔值、数字和空值。在这里查看一些示例:http://msdn.microsoft.com/en-us/library/windows/apps/hh770289.aspx
您无需添加任何库。
【讨论】:
如果您在其他 .NET 配置文件中使用过 Json.NET,您可以通过 NuGet 将该库添加到您的 Windows 应用商店应用项目中。
这里有一些例子:
对象到 Json
var obj = new { Name = "Programming F#", Author = "Chris Smith" };
string json = JsonConvert.SerializeObject(obj, Formatting.Indented);
查询Json
var json = @"{""Name"": ""Programming F#"",""Author"": ""Chris Smith""}";
var jObject = JObject.Parse(json);
字符串名称 = (string)jObject["Name"]; // 编程 F#
Json 到数组
string json = @"['F#', 'Erlang', 'C#', 'Haskell', 'Prolog']";
JArray 数组 = JArray.Parse(json);
foreach(数组中的变量项) { 字符串名称=(字符串)项目; }
您可以找到 Json.NET 文档here。
【讨论】:
当使用 JSON REST 服务时,我发现到目前为止反序列化 JSON 的最佳方法是使用包含 ReadAsASync(HTTP Content) 和 HttpClient 的 HttpContentExtensions 类。这个扩展类可以通过安装Microsoft ASP.NET Web API 2.2 Client NUGET package找到。
发出网络请求和反序列化就这么简单:
private const string baseUri = "https://weu.google.co/";
private HttpClient client = new HttpClient();
var result = await client.GetAsync([Your URI]);
var data = await result.Content.ReadAsAsync<YourClass>();
return data.Value;
【讨论】: