如何通过反序列化提取封装在响应的data
对象中的返回json响应的有效负载?
这是json的回应:
{"data":{"status":"ok","created_at":"2017-05-26 17:34:12.224524Z","app_version":1.0,"api_version":1.0}}
我的转换器类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json.Converters;
namespace Sample.Models
{
class StatusConverter : CustomCreationConverter<Status>
{
public override Status Create(Type objectType)
{
return new Status();
}
}
}
我Status
的模型
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
namespace Sample.Models
{
class Status
{
[JsonProperty("app_version")]
public string AppVersion { get; set; }
[JsonProperty("api_version")]
public string APIVersion { get; set; }
[JsonProperty("status")]
public string CurrentStatus { get; set; }
}
}
使用RestClient
public void checkConnectivityStatus()
{
var client = new RestClient(BaseUrl);
var request = new RestRequest("status", Method.GET);
IRestResponse response = client.Execute(request);
var content = response.Content; // raw content as string
Status status = JsonConvert.DeserializeObject<Status>(content, new StatusConverter());
Console.Write(status.AppVersion);
}
编辑:更新模型
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
namespace Sample.Models
{
public interface IStatus
{
string AppVersion { get; set; }
string APIVersion { get; set; }
string CurrentStatus { get; set; }
}
[JsonObject]
class Status : IStatus
{
[JsonProperty("app_version")]
public string AppVersion { get; set; }
[JsonProperty("api_version")]
public string APIVersion { get; set; }
[JsonProperty("status")]
public string CurrentStatus { get; set; }
}
}
答案 0 :(得分:1)
您只需要一个包装对象作为回应。
public class DeserializedResponse
{
[JsonProperty("data")]
public Status Status { get; set; }
}
然后像这样使用它:
//var content = {"data":{"status":"ok","created_at":"2017-05-26 17:34:12.224524Z","app_version":1.0,"api_version":1.0}}
var deserializedResponse = JsonConvert.DeserializeObject<DeserializedResponse>(content);
Debug.Assert(deserializedResponse.Status.CurrentStatus == "ok");