1

私はこのように見えるいくつかのコードを持っています:

public Tuple<bool, SomeObjectModel> CheckIfJsonIsValid(string IncomingJson)
{
   SomeObjectModel TheObjectModel = new SomeObjectModel();
   JavascriptSerializer TheSerializer = new JavascriptSerializer();
   .....

   try
   {
       TheObjectModel = TheSerializer.Deserialize<SomeObjectModel>(IncomingJson);
   }
   catch
   {
       return new Tuple<bool, SomeObjectModel>(false, null); //question here
   }

   .....
   return new Tuple<bool, SomeObjectModel>(true, TheObjectModel);
}

呼び出し元のメソッドは、最初に返されるタプルのItem1をチェックし、それがfalseの場合、そのプロセスを終了します。

a)タプルでnull値を返すか、b)SomeObjectModelの新しくて新しいインスタンスを返す方が良い方法ですか?パフォーマンスへの影響はありますか?

あなたの提案をありがとう。

4

1 に答える 1

2

3つの代替ソリューションを提案させてください。


ParseJsonIfValid:逆シリアル化が機能する場合、TheObjectModelは常にnullではありません。したがって、ブール値は必要ありません。

public SomeObjectModel ParseJsonIfValid(string IncomingJson)
{
   JavascriptSerializer TheSerializer = new JavascriptSerializer();
   .....

   try
   {
       return TheSerializer.Deserialize<SomeObjectModel>(IncomingJson);
   }
   catch
   {
       return null;
   }
}

呼び出し元の関数で、戻り値がnullかどうかを確認するだけです。


ParseJson:JSONが通常有効であり、無効なJSONが何かがひどく間違っていることを示している場合は、例外をスローします。

public SomeObjectModel ParseJson(string IncomingJson)
{
   JavascriptSerializer TheSerializer = new JavascriptSerializer();
   .....

   try
   {
       return TheSerializer.Deserialize<SomeObjectModel>(IncomingJson);
   }
   catch (Exception e)
   {
       throw new TheServerSentRubbishException(e);
   }
}

呼び出し元の関数がデバッグ目的でエラーの実際の原因をログに記録できるように、必ず内部(「実際の」)例外を含めてください。


TryParseJson有効なnull逆シリアル化である可能性がある場合は、次のパターンを使用できます。これには、.NETFrameworkのメソッドと一貫性があるという利点があります。TryParse

public bool TryParseJson(string IncomingJson, out SomeObjectModel theObjectModel)
{
   JavascriptSerializer TheSerializer = new JavascriptSerializer();
   .....

   try
   {
       theObjectModel = TheSerializer.Deserialize<SomeObjectModel>(IncomingJson);
       return true;
   }
   catch (Exception e)
   {
       return false;
   }
}
于 2013-02-08T08:08:36.617 に答える