如何在POST请求中传递字典作为负载的一部分
本文关键字:字典 负载 一部分 POST 请求 | 更新日期: 2023-09-27 18:06:59
我正在尝试使用高级Rest客户端Chrome扩展在本地测试我的WebApi我想传递一个字典作为有效载荷的一部分,我试图使POST请求。在调试时,我发现字典即使我以json格式传递它也不能正确地反序列化,并且字典的计数仍然为零。
有效负载示例:
{
"DictionaryForEvaluationTelemetries" :{ "B":"{'"Counter'":'"500'"}"}
}
这是字典
中对象的简单代码[DataContract]
class Class1
{
private int counter;
[DataMember]
public int Counter
{
get { return counter; }
}
public void Increment()
{
Interlocked.Increment(ref counter);
}
}
[DataContract]
public class TelemetryPayload
{
[DataMember]
public ConcurrentDictionary<string, Class1> DictionaryForEvaluationTelemetries { get; set; }
}
[HttpPost]
public void LogEvaluationTelemetry()
{
// Internally the below method does : JsonSerializer<T>.Deserialize(request.Content.ReadAsStringAsync().Result);
var telemetryPayload = Request.GetObjectFromBody<TelemetryPayload>();
}
JSON反序列化由system . runtime . serialize . JSON完成
using System.IO;
using System.Runtime.Serialization.Json;
using System.Text;
public static class JsonSerializer<T> where T : class
{
public static T Deserialize(string jsonObject)
{
byte[] array = Encoding.UTF8.GetBytes(jsonObject);
using (MemoryStream ms = new MemoryStream(array))
{
DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(T));
return (T)jsonSerializer.ReadObject(ms);
}
}
据我所知,你传递的json没有一个对象,将映射到Class1。你的json应该是这样的:
{
"DictionaryForEvaluationTelemetries" : {"B": {"Counter": 500}}
}
DictionaryForEvaluationTelemetries的地方。B将映射到Class1。
或者,取决于Request.GetObjectFromBody<>方法的作用,可能更像这样:
{"Counter" : 500}
上面的问题有两个问题:1)有效载荷格式不正确:
{
"DictionaryForEvaluationTelemetries" : {"B": {"Counter": 500}}
}
2)反序列化使用System.Runtime.Serialization.Json。我把它改成了NewtonSoft。Json JsonConvert。DeserializeObject