2013-02-22 27 views
14

我有一個包含一些複雜類型的EF代碼優先模型。生成Web API控制器的工作沒有任何問題,但是如http://blogs.msdn.com/b/yaohuang1/archive/2012/08/15/introducing-the-asp-net-web-api-help-page-preview.aspx中所述生成Web API幫助頁時,則不會生成樣本。給出的錯誤消息是:在模型中使用實體框架複雜類型時不適用於Web API幫助頁的樣本

使用格式化程序'JsonMediaTypeFormatter'爲媒體類型'application/json'生成示例時發生異常。異常消息:發生一個或多個錯誤。

其他媒體類型也會發生同樣的情況。前段時間我知道有一個問題,它有複雜的類型和序列化,但是當Web API中默認包含Json.NET格式化程序時,它就解決了。

這可能是相關的嗎?其他人還有相同的疑問麼?有任何想法嗎?

回答

32

我的猜測是,這很可能是由於您的模型具有參考循環。例如,您可以嘗試通過對Json格式器進行以下更改來生成幫助頁面。你應該看到如何產生的樣本:

 config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Serialize; 
     config.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects; 

此外,你應該甚至在運行時實際看到類似的錯誤,如果你不把上面的設置。

對於XmlFormatter和自引用循環,您可以看看here

+0

你是絕對正確的,只是發生了每一個有參考循環的模型,也有一個複雜的類型。非常感謝! – kkara 2013-02-24 09:23:17

+3

你會想把它放在WebApiConfig.cs中。 – bbodenmiller 2014-02-17 19:24:47

+2

這樣做的時候,我還是得到了奇怪的$ ref和$ id標籤。我找到了一個更好的方法:將get的子引用設置爲父項的內部。資料來源:http://truncatedcodr.wordpress.com/2012/09/10/entity-framework-circular-references/ – WiteCastle 2014-08-17 02:27:41