2012-11-21 52 views
2

我想要搜索所有地方,如下所示使用Controllers中的匿名類型。在C中限制匿名類型的使用情況#

if(success) { 
    returnData = JsonConvert.SerializeObject(new { Success = true, Message = "Operation completed successfully" }); 
} 
else { 
    returnData = JsonConvert.SerializeObject(new { Success = false, Message = "Operation failed" }); 
} 

在上述情況下,returnDataJsonResult及其對我國Razor的觀點來解析AJAX請求的狀態。

我想在這種情況下最小化匿名類型的使用,因爲這可能是維護問題,因爲如果任何行被寫爲new { Succes = true, Message = "Operation completed successfully"},編譯器不會引發任何警告/錯誤,並且會導致運行時錯誤客戶端腳本。

任何有關限制這種情況或檢測此類情況的見解將不勝感激。

回答

4

爲什麼不在解決方案/項目中使用選項「使用正則表達式」進行搜索?

\bnew\s*{ 
+0

是的,我已經這樣做了,但我想有一些可以用在自動化報告中的東西,比如TFS Build Warnings。 –

2

只是不要使用匿名類型。創建一個新的具體類型與數據計劃使用:

public class JSONMessage 
{ 
    public string Message { get; set; } 
    public bool Success { get; set; } 
} 

那麼這些線可以改爲:

if(success) { 
    returnData = JsonConvert.SerializeObject(new JSONMessage(){ Success = true, Message = "Operation completed successfully" }); 
} 
else { 
    returnData = JsonConvert.SerializeObject(new JSONMessage(){ Success = false, Message = "Operation failed" }); 
} 
+0

當我將你的建議標記爲我的問題的答案時,我想知道的是有什麼方法可以通過任何編譯器開關或類似的東西來檢測匿名類型的使用情況,以便如果開發人員繞過指南他們立即知道。 –

+0

@SudevG編譯器無法告訴你,但你可能會使用第三方代碼分析工具,比如Resharper。我對它不是很熟悉,但是我知道你可以用它來編寫驗證腳本來處理* this這樣的事情。不知道它的腳本框架是否足夠強大,或者對於這樣的事情是否容易/困難。 – Servy

+0

問題是關於搜索和限制匿名類型的使用。你的回答應該是一個評論。 –

0

如何包裝的JSON調用,這樣就可以有運行時錯誤/斷言:

首先延伸到從這裏檢測匿名:Determining whether a Type is an Anonymous Type

public static class TypeExtension { 

    public static Boolean IsAnonymousType(this Type type) { 
     var hasCompilerGeneratedAttribute = type.GetCustomAttributes(typeof(CompilerGeneratedAttribute), false).Count() > 0; 
     var nameContainsAnonymousType = type.FullName.Contains("AnonymousType"); 
     var isAnonymousType = hasCompilerGeneratedAttribute && nameContainsAnonymousType;  
     return isAnonymousType; 
    } 
} 

然後使用它你的新方法。

public static object JsonSeralize(object obj) 
    { 
     Debug.Assert(!obj.getType().IsAnonymousType());  
     return JsonConvert.SerializeObject(obj); 
    } 

現在,您可以輕鬆地搜索該非法直接調用JsonConvert.SerializeObject地方。