如何在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);
            }
}

如何在POST请求中传递字典作为负载的一部分

据我所知,你传递的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