2015-06-26 84 views
1

我有一個小的Web API 2應用程序,我試圖實現傳入請求和傳出響應的日誌記錄(基本上記錄你通過HTTP流量看到的東西Fiddler2)。序列化IHttpActionResult作爲JSON導致異常

在嘗試序列化來自某個方法的響應時,我收到了我不知道如何處理的異常。我試着玩JsonSerializerSettings等等。我可能會以完全錯誤的方式去做這件事。將不勝感激任何指導。

下面是導致異常的代碼片段。

var response = Ok(successMessage); 
JsonSerializerSettings settings = new JsonSerializerSettings 
{ 
    PreserveReferencesHandling=Newtonsoft.Json.PreserveReferencesHandling.Objects, 
    ReferenceLoopHandling = ReferenceLoopHandling.Ignore 
}; 
this.Logging.LogMessage(MessageType.ServiceResponse, JsonConvert.SerializeObject(response, Formatting.Indented, settings)); 
return response; 

例外:

Newtonsoft.Json.JsonSerializationException: Error getting value from 'ReadTimeout' on 'System.Web.HttpInputStream'. ---> 
System.InvalidOperationException: Timeouts are not supported on this stream. at System.IO.Stream.get_ReadTimeout() at GetReadTimeout(Object) 
at Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(Object target) --- End of inner exception stack trace --- 
at Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(Object target) 

回答

0

是否有響應內的1一對多的關係?響應中是否包含一個列表,並且在該列表項中它包含回到響應的引用?

當構建一個json子節點時,無法引用它們的父節點,在嘗試序列化時會產生無限循環。

構建一個視圖模型並將該引用移回父級。只要通過parentid。

+0

等一下。爲什麼不只是返回ok(成功消息) – MIKE

+0

,因爲我想將響應記錄在數據庫中。這是一個簡單的例子,但我們也希望記錄其他請求驗證錯誤以及類似事件的響應條件。 – Cortright