我正在查询Google Books API,我正在将这些书解析为这样的自定义对象:
foreach (JToken item in items)
{
try
{
FoundBookViewModel viewModel = new FoundBookViewModel
{
Title = item.SelectToken("volumeInfo.title").ToString(),
Isbn13 = item.SelectToken("volumeInfo.industryIdentifiers[1].identifier").ToString(),
Authors = item.SelectToken("volumeInfo.authors").Select(x => x.ToString()).ToList().Aggregate((i, j) => i + ", " + j),
Pages = item.SelectToken("volumeInfo.pageCount").ToString(),
ImageUri = item.SelectToken("volumeInfo.imageLinks.smallThumbnail").ToString()
};
newList.Add(viewModel);
}
catch (Exception)
{
newList.Add(new FoundBookViewModel());
}
}
但是,有时并非所有数据都可用。有时没有'pageCount',有时没有'ISBN13'等。在这些情况下,ToString()部分会抛出异常。
所以我想要的是:当其中一个属性抛出异常时,我只想让它成为一个空字符串。但我不知道如何实现这一目标。
我尝试过多种方法:
当然我可以将每个操作放在自己的try catch中,但是在这种情况下会产生5个try catch块,所以这不是我想要的。
谁知道一个干净的方法来解决这个问题?顺便说一句。我选择使用LINQ to JSON而不是直接实现它,因为Google Books API不能整齐地映射到简单实体(JSON包含大量嵌套)。
答案 0 :(得分:5)
如果你不想抛出异常 - 不要......
即。您可以将item.SelectToken("volumeInfo.pageCount").ToString()
更改为:
item.SelectToken("volumeInfo.pageCount") == null?
String.Empty : item.SelectToken("volumeInfo.pageCount").ToString()