文字列をURIに変換し直す場合は、カスタムコンバーター属性を使用できます
コンバーター
public class UriConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return true;
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.String)
{
//try to create uri out of the string
Uri uri;
if(Uri.TryCreate(reader.Value.ToString(), UriKind.Absolute, out uri))
{
return uri;
}
//just a string -> return string value
return reader.Value;
}
if (reader.TokenType == JsonToken.Null)
{
return null;
}
throw new InvalidOperationException("Unable to process JSON");
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
if (null == value)
{
writer.WriteNull();
return;
}
if (value is Uri)
{
writer.WriteValue(((Uri)value).OriginalString);
return;
}
throw new InvalidOperationException("Unable to process JSON");
}
}
そして、使用属性
[JsonConverter(typeof(UriConverter))]
public object Obj {get;set;}
次に、基になるオブジェクトがUriのようなものであるかどうかを判断できるはずです。
var data = JsonConvert.DeserializeObject<YourObject>(yourJSONString);
if (data.Obj is Uri)
{
... add logic here
}
else
{
... not Uri different logic
}
Json.NET URI(de)serializationエラーの詳細については、この記事を確認することもできます