1

Klout API から応答があります。応答には次のフィールドがあります

  • 名前
  • スコア
  • スコアデルタ
    • 日替わり
    • 週の変更
    • 月の変更

.NET でクラスを作成し、オブジェクトに JSON 応答を入力しました。これは正常に機能していますが、JSON 応答に ScoreDeltas がない場合があります。これをその場で確認するにはどうすればよいですか?

JavaScriptSerializer _jsserializer = new JavaScriptSerializer();
var list = _jsserializer.Deserialize<List<KloutInfluencer>>(influencer as string);

//KloutInfluencer is the ckass with all fields.

それは私NullReferenceにこれを与えます

public double dayChange
{
    get { return entity.payload.scoreDeltas.dayChange ; }
}

これは、(この ID の) JSON 応答に ScoreDelta 要素がないためです。実行時にそれを確認するにはどうすればよいですか?

4

2 に答える 2

1

オプション 1 - プロパティ内で処理する:

次のように書くことができます。

public double dayChange
{
    get { return entity.payload.scoreDeltas == null ? 0 : entity.payload.scoreDeltas.dayChange }
}

オプション 2 - すべてのオブジェクトに対して、逆シリアル化後に手動で処理します。

実際には、デフォルト値を決定する必要があります。これはおそらく受け入れられます。リストを手動で操作して、scoreDeltas を新しいインスタンスに設定することもできます。このようなもの:

list.ForEach( entry => entry.scoreDeltas = entry.scoreDeltas ?? new ScoreDealtas() );
// On my MAC currently, untested, should show an idea

オプション 3 - 各オブジェクト内で逆シリアル化の直後に処理します。

Microsoft は、オブジェクトが逆シリアル化されたときに呼び出される実装可能なインターフェイスも提供します (IDeserializationCallback、http: //msdn.microsoft.com/en-us/library/system.runtime.serialization.ideserializationcallback.aspx )。これをKloutInfluencerクラスに実装すると、json が値を提供しないため、null のままのプロパティを処理できます。

于 2012-07-01T13:04:19.103 に答える
1

dayChangeクラスのプロパティをKloutInfluencernullable に変更してscoreDeltas、ペイロードのプロパティが設定されているかどうかを確認するだけです。

public double? dayChange
{
    get
    {
        if (null == entity ||
            null == entity.payload ||
            null == entity.payload.scoreDeltas)
        {
            return null;
        }

        return entity.payload.scoreDeltas.dayChange;
    }
}
于 2012-07-01T13:04:54.763 に答える