C# 无键/值文本的POST JSON字典

C# 无键/值文本的POST JSON字典,c#,json,wcf,serialization,C#,Json,Wcf,Serialization,我有一个WCF端点,如下所示: [OperationContract] [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Json, UriTemplate = "")] Stream DoWork(Dictionary<string, string> items); {"items":[{"Key":"rando

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

[OperationContract]
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Json, UriTemplate = "")]
Stream DoWork(Dictionary<string, string> items);
{"items":[{"Key":"random1","Value":"value1"}, {"Key":"random2","Value":"value2"}]}
我希望它看起来像这样:

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

有没有办法做到这一点?

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

我一直在寻找相同的解决方案。我通过使用“JavaScriptSerializer”成功地使它工作。您必须将函数输出设置为“Stream”而不是“String”

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

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

它在这里免费提供,也可以作为NuGet软件包提供

我发现它比股票JSON序列化程序灵活得多


而且,您的模板看起来是空的。我没有使用包裹体样式,但是对于裸体样式,您需要填充URITemplate

您基本上需要一个SerializableDynamic对象,因此您的方法如下所示:

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

关于如何从字典构建SerializableDynamic对象,您可以在这里看到一个很好的指南:(参见第节)。希望这有帮助…

检查@newbeee-这并不容易。您希望设置,但它从未公开,因此需要替换整个序列化程序。看到或看到。可能也需要。@newbeee-事实上我认为这是重复的。