POST JSON字典没有键/值文本

本文关键字:文本 JSON 字典 POST | 更新日期: 2023-09-27 18:16:40

我有一个WCF端点,如下所示:

[OperationContract]
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Json, UriTemplate = "")]
Stream DoWork(Dictionary<string, string> items);

为了传递任何东西到我的服务,我必须像这样构造我的JSON:

{"items":[{"Key":"random1","Value":"value1"}, {"Key":"random2","Value":"value2"}]}

我想让它看起来是这样的:

{"items":{"random1":"value1","random2":"value2"}}

有办法做到这一点吗?

POST JSON字典没有键/值文本

您是否可以将DoWork参数更改为字符串,然后在方法中使用Json反序列化器将其转换为适当的格式?

我一直在寻找同样的解决方案。我设法通过使用"JavaScriptSerializer"让它工作。您必须将函数输出设置为'流'而不是'字符串'。

Public Function hotel_availability(ByVal data1 As Stream) As Stream Implements IMyTestAPI.hotel_availability
....
Dim serializer As New JavaScriptSerializer()
Dim serializedResult = serializer.Serialize(a_response)
Dim json = Encoding.UTF8.GetBytes(serializedResult)
Dim a_result as  New MemoryStream(json)
WebOperationContext.Current.OutgoingResponse.ContentType = "application/json; charset=utf-8"
return a_result

你基本上需要一个SerializableDynamic Object,所以你的方法看起来像这样:

[OperationContract]
[WebInvoke(...)]
Stream DoWork(SerializableDynamicObject items);

你可以在这里看到一个关于如何从字典构建SerializableDynamic对象的很好的指南:(参见解决方案部分)。

使用Newtonsoft JSON序列化器可能会更成功。

它可以在这里免费获得http://www.newtonsoft.com/json,也可以作为NuGet包获得。

我发现它比传统的JSON序列化器灵活得多。

同样,看起来您的URITemplate是空的。我没有使用包装体样式,但是对于裸体样式,您需要填充URITemplate。