【发布时间】:2019-11-26 20:41:37
【问题描述】:
我正在尝试与 api (isbndb.com) 交谈,并且我可以成功获得响应。使用流式阅读器我什至可以得到一个包含 json 的字符串。但是,该字符串还将包含用于换行符等的特殊字符。 因此我无法反序列化 json。字符串内容如下所示:
"{\n \"book\":\n \n {\n \"publisher\":\"Pearson\",\n \"language\":\"Eng\",\n \"image\":\"https:\\/\\/images.isbndb.com\\/covers\\/34\\/13\\/9780134093413.jpg\",\n \"title_long\":\"Campbell Biology (11th Edition)\",\n \"edition\":\"11\",\n \"pages\":1488,\n \"date_published\":\"2017\",\n \"subjects\":[\"Biology\"],\n \"authors\":[\"Lisa A. Urry\",\"Michael L. Cain\",\"Steven A. Wasserman\",\"Peter V. Minorsky\",\"Jane B. Reece\"],\n \"title\":\"Campbell Biology (11th Edition)\",\n \"isbn13\":\"9780134093413\",\n \"msrp\":\"259.99\",\n \"binding\":\"Hardcover\",\n \"publish_date\":\"2017\",\n \n \n \"isbn\":\"0134093410\"\n }\n }"
让我得到这个结果的方法如下所示:
public bool TryGetBook(string isbn)
{
bool rtnValue = false;
string WEBSERVICE_URL = Globals.WEBSERVICE_URL + isbn;
try
{
var webRequest = WebRequest.Create(WEBSERVICE_URL);
if (webRequest != null)
{
webRequest.Method = "GET";
webRequest.ContentType = "application/json";
webRequest.Headers["Authorization"] = Globals.REST_KEY;
//Get the response
WebResponse wr = webRequest.GetResponseAsync().Result;
Stream receiveStream = wr.GetResponseStream();
StreamReader reader = new StreamReader(receiveStream);
string content = reader.ReadToEnd();
if (content != null)
{
Book book = JsonConvert.DeserializeObject<Book>(content);
if (book != null)
{
Books.Add(book);
rtnValue = true;
}
}
}
}
catch (Exception ex)
{
}
return rtnValue;
}
我不太确定在这里做什么,我可以编写一个正则表达式来清理我的示例数据,但这似乎是错误的做法。
非常感谢任何帮助。
【问题讨论】:
-
您可以简单地替换换行符。顺便说一句,您遇到了哪个错误?
-
没有错误,我的 Book 对象的每个值都为 null。
-
@ThorGiversen 如果你的书的数量是预期的,那么你应该检查一下我认为的其他地方
-
@ThorGiversen
Replace("\n", "")正在工作,请检查我的答案。另外,Book对象是嵌套的,你应该正确反序列化它
标签: c# json rest webrequest