DynamicJsonでJSONでない文字列をパースしたときの処理

DynamicJsonという、事前にクラスを定義せずにJSONを読み込める便利なライブラリがある。

DynamicJson - Home

DynamicJsonでJSONでない文字列をパースしたときの処理をどうするか、という話。

C#JSONをパースしたいときというのは、だいたいWebAPIを叩いたときのレスポンスがJSONで、 それをパースするときかと思う。

必ずJSONが返ってくるのなら何も問題はないが、 APIを正しく叩けてない場合などにたまにJSONでないときがある。*1

その場合に、以下のように単純にDynamicJsonでパースすると例外を吐く。

string incorrectJsonString = @"NOT JSON STRING";
var missJson = DynamicJson.Parse(incorrectJsonString);

f:id:posnum:20141005104447j:plain

型 'System.Xml.XmlException' のハンドルされていない例外が System.Runtime.Serialization.dll で発生しました

追加情報:予期しない文字 'J' が見つかりました。

パースするまでは正しいJSON文字列かは当然わからないので、 例外処理を書いてやる必要がある。

System.Xml.XmlException を catch する。

string incorrectJsonString = @"NOT JSON STRING";
try
{
    var missJson = DynamicJson.Parse(incorrectJsonString);
}
catch (System.Xml.XmlException ex)
{
    Console.WriteLine(ex.Message);
}

*1:操作の対象となるURIを誤った場合など