Метод newsfeed.search, поле from_id

Jul 15, 2014 at 3:42 PM
Используя метод News.Search(), в результате получаю коллекцию BaseNewsEntity. Как узнать автора поста, если этот пост -- комментарий? В таком случае ownerId не подходит, а поля from_id у класса нет.

Как легко и непринуждённо узнать автора?
Coordinator
Jul 16, 2014 at 5:48 PM
Edited Jul 16, 2014 at 5:48 PM
На скорую руку исправил. Просто добавил в BaseNewsEntity свойство FromId. Посмотрите последний changeset.

В этом случае очень сильно выражен главный недостаток подобных библиотек со статической типизацией. В разных методах казалось бы одинаковые структуры ответа могут отличаться совсем незначительно, тогда приходится либо добавлять в структуру информацию, которая будет лишней в одном из случаев, либо плодить новые структуры данных. С двоих зол я выбрал меньшее - первый случай.
Возможно, в будущем я сделаю версию библиотеки с динамической типизацией, при этом ей будет немного сложнее пользоваться, но вероятность ошибок в самом API Wrapper существенно снизиться.
Marked as answer by piratuk on 7/16/2014 at 1:35 PM
Jul 17, 2014 at 3:08 PM
Магическим образом метод вообще перестал работать.
var results = News.Search(q: tag);

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
[NullReferenceException: Object reference not set to an instance of an object.]
   VkAPI.Wrappers.Common.GeoInfo..ctor(XmlNode node) +183
   VkAPI.Wrappers.News.BaseNewsEntity..ctor(XmlNode node) +789
   VkAPI.Wrappers.News.News.<Search>b__16(XmlNode y) +52
   System.Linq.WhereSelectEnumerableIterator`2.MoveNext() +145
   System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) +439
   System.Linq.Enumerable.ToList(IEnumerable`1 source) +58
   VkAPI.Wrappers.News.News.Search(String q, Nullable`1 count, String startFrom, Nullable`1 startTime, Nullable`1 endTime, Nullable`1 startId, Nullable`1 lat, Nullable`1 lng) +820
   SocialNetworksGrabber.Grabbers.VkGrabber.GetPosts(List`1 tags, DateTime from) in f:\workspace\SocialNetworksGrabber\SocialNetworksGrabber\Grabbers\VkGrabber.cs:31
   SocialNetworksGrabber.SocialNetworksGrabber.GrabPosts(List`1 tags, DateTime from) in f:\workspace\SocialNetworksGrabber\SocialNetworksGrabber\SocialNetworksGrabber.cs:30
   TestWebClient.Controllers.HomeController.Index() in f:\workspace\SocialNetworksGrabber\TestWebClient\Controllers\HomeController.cs:18
   lambda_method(Closure , ControllerBase , Object[] ) +101
   System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +14
   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +208
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +27
   System.Web.Mvc.Async.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41() +28
   System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +10
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +57
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +48
   System.Web.Mvc.Async.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33() +57
   System.Web.Mvc.Async.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() +223
   System.Web.Mvc.Async.<>c__DisplayClass37.<BeginInvokeActionMethodWithFilters>b__36(IAsyncResult asyncResult) +10
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +57
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +48
   System.Web.Mvc.Async.<>c__DisplayClass2a.<BeginInvokeAction>b__20() +24
   System.Web.Mvc.Async.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult) +102
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +57
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +43
   System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) +14
   System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +23
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62
   System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +57
   System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +23
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62
   System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +47
   System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10
   System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) +25
   System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +23
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +47
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9690172
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155
Возможно, это я что-то сломал,