2011-08-09 61 views
0

在WebMethod中,我使用JSON.NET手動序列化我的對象以避免實體框架循環引用問題。使用JSON.NET代替默認的WebMethod序列化

我有以下代碼:

Dim qry = From m In entity.Mediators _ 
      Where m.MediatorNumber = mediatorNumber _ 
      Select m 

For Each mediator In qry 
    mediator.MediatorRestrictionsAvailabilities.Load() 
    customMediator = mediator 
Next 

customJson = JsonConvert.SerializeObject(customMediator, Formatting.Indented) 

的問題是,其結果是不正確格式的JSON,並且不能在客戶端上解析;它看起來像這樣:

{「d」:「{\ r \ n \」$ id \「:\」1 \「,\ r \ n \」MediatorId \「:922,\ r \ n \「AreaCode \」:\「E \」,\ r \ n \「PFCCode \」:\「840 \」,\ r \ n \「名字\」:\「Joe \」,\ r \ n \ 「名字\」:\「史密斯\」,\ r \ n

做一些研究,我已經瞭解到,這是當JSON是reserialized成JSON發生了什麼之後

我怎麼做我自己。自定義序列化沒有默認的序列化程序阻礙?

+0

據我所知ASP.NET Web服務不提供與另一個替換序列化。您只能提供自定義轉換器。 –

回答

0

我有一個類似的問題一會兒回來,here are the suggestions我給了。我的解決方案是,我不需要再次序列化對象到JSON中,因爲它已經被序列化了。

祝你好運,希望這有助於一些。

+0

克里斯感謝您的回覆。你是正確的,但我不能使用本機串行器,因爲在我的情況下,它會導致循環引用錯誤。我必須使用JSON.NET來輸出自定義的JSON。 – Asmussen

+0

因此,您可能必須編寫自定義.ashx處理程序並自行模擬服務行爲,或修改實體代碼以不序列化循環引用。 –

0

對於圓形參考使用這種方法:

string json = JsonConvert.SerializeObject(
    infoToSerialize, Formatting.Indented, 
    new JsonSerializerSettings{ ReferenceLoopHandling = 
    ReferenceLoopHandling.Ignore 
});