2011-12-03 11 views
8

/ValueはキーなしPOST JSON辞書、私はそのように似ているWCFエンドポイントを持っているテキスト

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

私は実際にそれが見えるようにしたいことはこれです:

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

は、これを実現する方法はありますか?

+0

チェック Christie

+0

@NewBeeee - 簡単ではない。 [DataContractJsonSerializerSettings.UseSimpleDictionaryFormat](https://msdn.microsoft.com/en-us/library/system.runtime.serialization.json.datacontractjsonserializer.usesimpledictionaryformat.aspx)を設定する必要がありますが、公開されることはないため、シリアライザ全体を置き換える。 https://stackoverflow.com/questions/6792785またはhttps://stackoverflow.com/questions/11003016をご覧ください。おそらくhttps://stackoverflow.com/questions/33554997も必要になります。 – dbc

+0

@NewBeeee - 実際には、https://stackoverflow.com/questions/6792785/replace-wcf-default-json-serializationは重複していると思います。 – dbc

答えて

4

DoWorkパラメータを文字列に変更し、メソッド内のJsonデシリアライザを使用して適切な形式に変換するオプションはありますか?

0

私は同じ解決策を探していました。私はJavaScriptSerializerを使って動作させることができました。関数出力を 'String'ではなく 'Stream'に設定する必要があります。

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 
-1

Newtonsoft JSONシリアライザを使用すると成功する可能性があります。

無料でhttp://www.newtonsoft.com/jsonが利用可能で、NuGetパッケージとしても入手できます。

私は株式JSONシリアライザよりもはるかに柔軟であることが分かっています。

また、あなたのURITemplateが空であるようです。私はラップされたボディスタイルを使用していませんが、素人のボディスタイルでは、URITemplateを実装する必要があります。

0

あなたの方法は次のようになりますように、あなたは基本的に、SerializableDynamicオブジェクトが必要になります。

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

あなたがここに辞書からSerializableDynamicオブジェクトを構築する方法についての良いガイドを見ることができます:(Solutionセクションを参照してください) 。これが役立つことを願って...

関連する問題