2011-12-13 15 views
0

私はカスタムのJavaScriptコンバータを作成していますが、intを含む文字列を受け取ります。 これは私がやっているものです:jsonの逆シリアル化を行うときにintを構文解析する

public class MyObjectToJson : JavaScriptConverter 
{ 
public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer) 
{ 

    MyObject TheObject = new MyObject; 

    if (serializer.ConvertToType<int>(dictionary["TheInt"]) == true) 
    { 
    MyObject.TheInt = serializer.ConvertToType<int>(dictionary["TheInt"]); 
    } 

をしかし、それは条件文に取り組んでいません。私は何を変更する必要がありますか?私はintを取得していることをテストしたい。

ありがとうございました。

+0

'ConvertToType'は' bool'ではなく 'int'を返しています。 – canon

+0

変換が成功した場合は、要求タイプのオブジェクトを返します。次に、オブジェクトをブール値と比較します。 – Kakashi

+0

'私はカスタムjavascript converterを書いています'なぜですか? –

答えて

3
は、この条件を使用するようにコードを変更し

int value; 
if (int.TryParse(serializer.ConvertToType<string>(dictionary["TheInt"]), out value) 
{ 
    MyObject.TheInt = value; 
} 

これは、例外をキャッチすると、計算上高価であるとして、スローされた例外に頼るよりも優れたソリューションです。

+0

あなたのコードに「out value」がありません – Kakashi

+0

私はこのアプローチが気に入っています。 – Doug

2

ConvertToTypeは要求された型のオブジェクトを返すからです。 if句の条件として使用するには、boolを返す必要があります。

あなたは代わりにそれを行うことができます。

try { 
    MyObject.TheInt = serializer.ConvertToType<int>(dictionary["TheInt"]); 
} 
catch(Exception e) 
{ 
    throw new Exception("Could not convert value into int: " + dictionary["TheInt"]); 
} 

をEDIT:以前の私は、変換された値にnullに等しいかどうかのチェックを提案したが、それがnullを返すよりも例外をスローするメソッドのためのより多くの可能性がありますことに気づきました型が不一致のとき。

+0

ベストプラクティスの良いサンプル –

+0

@Doug:変換できない場合、ConvertToType()は例外を返します。なぜもう一度やりますか? –

+0

もっと意味のあるメッセージを伝えるだけです。たぶん私のメッセージには当てはまらないかもしれませんが、アプリケーションで何が起こっているのかを伝えるメッセージは、値を変換できないと言っているのではなく、トラブルシューティングに役立ちます。 – Doug

0

タイプをintにすることができない場合は、int.TryParseを代わりに使用してください。

MyObject TheObject = new MyObject; 

    if (!int.TryParse(dictionary["TheInt"], out MyObject.TheInt)) 
    { 
    // conversion to int failed 
    } 
関連する問題