2010-09-16 2 views
14

Bunun için bir yanıt bulacağımı göremediğim nispeten basit bir soru olmalı.WCF JSON Hizmetlerinde Tür İpucunu Devre Dışı Bırakma

WCF nesnelerin kendi seri gerçekleştirir, otomatik Tür Dayatma uygular. Json hizmetleri için, bu, __type adı verilen her karmaşık nesne için ek bir alana neden olur. Normalde bu bir sorun değildir

{ 
    "First" : "Hello", 
    "Last" : "World!", 
    "__type" : "SomeObject#MyNamespace.SomeObject" 
} 

:

[DataContract] 
public class SomeObject 
{ 
    [DataMember] 
    public string First { get; set; } 

    [DataMember] 
    public string Last { get; set; } 
} 

gibi bir şey serialize misiniz: Bir nesne olarak tanımlanır. Ne yazık ki, sınıfları oldukça büyük ve karmaşık yapılara yerleştirmeye başladığınızda, bu, müşteriye geri giden JSON cevabının büyüklüğünde bir ton yüke neden olur.

Elbette bu davranışı devre dışı bırakmanın bir yolu olmalı ama ben bir tane bulamadım (ne Rick Strahl back in 2007 vardı ... ama 2010 ve umarım birisi bunu anladı). DataContractJsonSerializer kullanma

cevap

5

polimorfizm ve destek ve bilinen bir türe geri serisini mümkün olmasını yapmak istiyorum gidiyor. NewtonSoft, __type ipucu eklemeyecek üçüncü taraf bir json serializer'tır. Sadece serileştiriyorsanız ve gerçek bir DataContract özniteliği kullanmıyorsanız, bunu denemek isteyebilirsiniz. Ben senin davranış config <enableWebScript/> kullanarak varsayarak yaşıyorum

7

, <webHttp defaultOutgoingResponseFormat="Json"/> ile değiştirmek ve bu benim için hile yaptı güzel ve temiz JSON

+0

gelen bu başarısız oldu. Bu bir 4.0 şey mi? –

+1

Sadece 4 üzerinde denedim, ancak bu belge http://msdn.microsoft.com/en-us/library/system.servicemodel.description.webhttpbehavior.defaultoutgoingresponseformat(v=vs.90) gibi görünüyor. .aspx http://msdn.microsoft.com/en-us/library/bb675191(v=vs.90).aspx – JeremyWeir

+0

Çalıştığım için teşekkürler, – bladefist

3

alacak:

[WebGet(ResponseFormat=WebMessageFormat.Json,BodyStyle = WebMessageBodyStyle.Bare)] 

bakın adım 7 Ben .NET 3.5SP1 için çalıştığımızda ve 10 http://dotnetdiscoveries.blogspot.com/2008/05/return-json-from-ajax-enabled-wcf.html

+1

Bu, benim için de çalıştı - Ayrıca, svc dosyamdaki fabrikayı WebScriptserviceHostFactory'den WebServiceHostFactory'ye değiştirmek zorunda kaldım. –

+0

Bu benim için çalışmadı. Ben app.config zaten belirtildiği gibi kurdum ve hala '__type' porperty alıyorum – CJLopez