public static BookMetaData FromString(string input)
{
var result = JsonConvert.DeserializeObject<BookMetaData>(input);
if(result == null)
{
throw new ApplicationException("meta.json of this book may be corrupt");
}
if (result.Tools != null)
{
foreach (var tool in result.Tools.Where(t => t is UnknownTool).ToArray())
result.Tools.Remove(tool);
}
return result;
}