2011-12-03 15 views
8

/Değer Anahtar olmadanPOST JSON Sözlüğü ben böyle böyle bir WCF bitiş noktası olan Metin

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

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

bunu gerçekleştirmek için herhangi bir yolu var mı:

ne aslında benzemek istiyorum bu nedir?

+0

Christie

+0

@NewBeeee - Kolay değil. [DataContractJsonSerializerSettings.UseSimpleDictionaryFormat] 'ı (https://msdn.microsoft.com/en-us/library/system.runtime.serialization.json.datacontractjsonserializer.usesimpledictionaryformat.aspx) ayarlamak istediğinizde, ancak hiçbir zaman açığa çıkmayacaksınız. tüm serileştiriciyi değiştirmek için. Https://stackoverflow.com/questions/6792785 veya https://stackoverflow.com/questions/11003016 adresine bakın. Muhtemelen https://stackoverflow.com/questions/33554997 de gerekli olacaktır. – dbc

+0

@NewBeeee - Aslında bence https://stackoverflow.com/questions/6792785/replace-wcf-default-json-serialization bir kopya. – dbc

cevap

4

DoWork parametresini bir dizgiye dönüştürmek için bir seçenek mi, daha sonra uygun formatta dönüştürmek için yöntemde bir Json deserializer mı kullanıyorsunuz?

0

Aynı çözümü arıyordum. 'JavaScriptSerializer' kullanarak çalışmayı başardım. İşlev çıkışını 'Aktarım' değil 'Aktarım' olarak ayarlamanız gerekir.

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 serializer'ı kullanarak daha başarılı olabilirsiniz.

Burada ücretsiz olarak http://www.newtonsoft.com/json mevcuttur ve ayrıca bir NuGet paketi olarak da kullanılabilir.

Stok JSON serileştiricilerden çok daha esnek buldum.

Ayrıca, URITemplate'iniz boş görünüyor. Sarılı vücut stilini kullanmamıştım, ama çıplak vücut stili ile URITemplate'i doldurmanız gerekiyor.

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

Burada bir Dictionary SerializableDynamic Nesne oluşturmak için nasıl iyi bir rehber görebilirsiniz: senin yöntem aşağıdaki gibi görünecektir böylece

0

Temelde, bir SerializableDynamic Nesne gerek (Solution bölümüne bakınız) . Umarım bu yardımcı olur ...

İlgili konular