【发布时间】:2019-07-18 17:54:38
【问题描述】:
我有一个接受 JSON 的服务,作为将请求从浏览器转发到 Web 服务器到服务(也是 HTTP 服务器)的一部分,我有以下代码:
if (Request.HttpMethod.ToLower() == "post")
{
var jsonObj = ObjectFromRequestBody<Dictionary<string, string>>();
if (jsonObj != null)
{
// uses Newtonsoft JSON Serializer to re-serialize the object; this is RestSharp
requestToForward.AddJsonBody(jsonObj);
}
}
ObjectFromRequestBody 如下所示:
protected T ObjectFromRequestBody<T>()
{
Stream requestStream = Request.InputStream;
requestStream.Seek(0, SeekOrigin.Begin);
string json = new StreamReader(requestStream).ReadToEnd();
var payload = JsonConvert.DeserializeObject<T>(json);
return payload;
}
现在,这可以正常工作,假设它是一个正在发布的 JSON 对象。 (KVP 合集)
但是,我想如果有效负载只是一个值(int、string、boolean 或 heck,甚至是数组),这将出错。
我尝试过简单地反序列化为 Object 类型,导致它被重新序列化为空数组的数组;可能是因为 Newtonsoft 的 JSON 序列化器默认将对象反序列化为 JObjects,这本质上是 KVP 的可枚举。
是否有一种与类型无关的方法可以从 Object 序列化到适当的类型,而无需编写一系列条件语句?
【问题讨论】: