2

Controllers匿名タイプインが使用されている以下のような場所を以下のように検索したいと思います。

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

上記の場合、returnDataはaであり、リクエストのステータスを解析するためにビューJsonResultで使用されます。RazorAJAX

匿名型の使用を最小限に抑えたいのですが、これはメンテナンスの問題になる可能性があります。これは、行のいずれかが次のように記述されている場合にコンパイラが警告/エラーを発生させずnew { Succes = true, Message = "Operation completed successfully"}、クライアント側のスクリプトで実行時エラーが発生するためです。 。

そのような状況を制限したり、そのようなインスタンスを検出したりするための洞察をいただければ幸いです。

4

3 に答える 3

4

オプション「正規表現を使用」をオンにして、ソリューション/プロジェクトでこれを検索してみませんか?

\bnew\s*{
于 2012-11-21T14:43:46.177 に答える
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" });
}
于 2012-11-21T14:55:11.780 に答える
1

実行時エラー/アサートが発生するように、json呼び出しをまとめてはどうでしょうか。

ここから匿名を検出するための最初の拡張:タイプが匿名タイプであるかどうかの判断

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

于 2012-11-21T15:30:26.780 に答える