diff --git a/VkNet/Enums/SafetyEnums/GroupChangeSettings.cs b/VkNet/Enums/SafetyEnums/GroupChangeSettings.cs
index cf91898a4..754d835ae 100644
--- a/VkNet/Enums/SafetyEnums/GroupChangeSettings.cs
+++ b/VkNet/Enums/SafetyEnums/GroupChangeSettings.cs
@@ -11,7 +11,7 @@ namespace VkNet.Model.GroupUpdate
/// Событие о изменении настроек сообщества
///
[Serializable]
- public class GroupChangeSettings
+ public class GroupChangeSettings : IGroupUpdate
{
///
/// Идентификатор пользователя, который внёс изменения;
diff --git a/VkNet/Enums/SafetyEnums/GroupUpdateType.cs b/VkNet/Enums/SafetyEnums/GroupUpdateType.cs
index 1380d8aad..57ecad031 100644
--- a/VkNet/Enums/SafetyEnums/GroupUpdateType.cs
+++ b/VkNet/Enums/SafetyEnums/GroupUpdateType.cs
@@ -1,8 +1,11 @@
+using System;
+
namespace VkNet.Enums.SafetyEnums
{
///
/// Тип обновления
///
+ [Obsolete("Типы обновлений теперь проверяются в GroupUpdate")]
public sealed class GroupUpdateType : SafetyEnum
{
///
diff --git a/VkNet/Enums/SafetyEnums/LikeAdd.cs b/VkNet/Enums/SafetyEnums/LikeAdd.cs
index f891260e6..b843fc76f 100644
--- a/VkNet/Enums/SafetyEnums/LikeAdd.cs
+++ b/VkNet/Enums/SafetyEnums/LikeAdd.cs
@@ -10,7 +10,7 @@ namespace VkNet.Model.GroupUpdate
/// Событие о новой отметке "Мне нравится"
///
[Serializable]
- public class LikeAdd
+ public class LikeAdd : IGroupUpdate
{
///
/// Идентификатор пользователя, который поставил отметку.
diff --git a/VkNet/Enums/SafetyEnums/LikeRemove.cs b/VkNet/Enums/SafetyEnums/LikeRemove.cs
index 1fd8a8412..c221d72f5 100644
--- a/VkNet/Enums/SafetyEnums/LikeRemove.cs
+++ b/VkNet/Enums/SafetyEnums/LikeRemove.cs
@@ -10,7 +10,7 @@ namespace VkNet.Model.GroupUpdate
/// Событие о снятии отметке "Мне нравится"
///
[Serializable]
- public class LikeRemove
+ public class LikeRemove : IGroupUpdate
{
///
/// Идентификатор пользователя, который убрал отметку.
diff --git a/VkNet/Enums/SafetyEnums/MessageTypingState.cs b/VkNet/Enums/SafetyEnums/MessageTypingState.cs
index e8107797c..02661ac68 100644
--- a/VkNet/Enums/SafetyEnums/MessageTypingState.cs
+++ b/VkNet/Enums/SafetyEnums/MessageTypingState.cs
@@ -9,7 +9,7 @@ namespace VkNet.Model.GroupUpdate
/// Объект, который содержит информацию о статусе печатании
///
[Serializable]
- public class MessageTypingState
+ public class MessageTypingState : IGroupUpdate
{
///
/// Идентификатор пользователя, который набирает текст.
diff --git a/VkNet/Enums/SafetyEnums/VkPayTransaction.cs b/VkNet/Enums/SafetyEnums/VkPayTransaction.cs
index d9d8a256f..f3d73781c 100644
--- a/VkNet/Enums/SafetyEnums/VkPayTransaction.cs
+++ b/VkNet/Enums/SafetyEnums/VkPayTransaction.cs
@@ -10,7 +10,7 @@ namespace VkNet.Model.GroupUpdate
/// платёж через VK Pay
///
[Serializable]
- public class VkPayTransaction
+ public class VkPayTransaction : IGroupUpdate
{
///
/// Идентификатор пользователя-отправителя перевода.
diff --git a/VkNet/Model/Attachments/Audio.cs b/VkNet/Model/Attachments/Audio.cs
index 90f848f77..e091f29c4 100644
--- a/VkNet/Model/Attachments/Audio.cs
+++ b/VkNet/Model/Attachments/Audio.cs
@@ -3,6 +3,7 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using VkNet.Enums;
+using VkNet.Model.GroupUpdate;
using VkNet.Utils;
namespace VkNet.Model.Attachments
@@ -12,7 +13,7 @@ namespace VkNet.Model.Attachments
/// См. описание http://vk.com/dev/audio_object
///
[Serializable]
- public class Audio : MediaAttachment
+ public class Audio : MediaAttachment, IGroupUpdate
{
///
protected override string Alias => "audio";
diff --git a/VkNet/Model/Attachments/Message.cs b/VkNet/Model/Attachments/Message.cs
index dac627dcb..642e589ff 100644
--- a/VkNet/Model/Attachments/Message.cs
+++ b/VkNet/Model/Attachments/Message.cs
@@ -5,6 +5,7 @@
using Newtonsoft.Json.Converters;
using VkNet.Enums;
using VkNet.Model.Attachments;
+using VkNet.Model.GroupUpdate;
using VkNet.Model.Keyboard;
using VkNet.Utils;
using VkNet.Utils.JsonConverter;
@@ -17,7 +18,7 @@ namespace VkNet.Model
///
[DebuggerDisplay("[{PeerId}-{Id}] {Text}")]
[Serializable]
- public class Message : MediaAttachment
+ public class Message : MediaAttachment, IGroupUpdate
{
///
protected override string Alias => "message";
diff --git a/VkNet/Model/Attachments/Photo.cs b/VkNet/Model/Attachments/Photo.cs
index 629fb37cd..d58e18c23 100644
--- a/VkNet/Model/Attachments/Photo.cs
+++ b/VkNet/Model/Attachments/Photo.cs
@@ -2,6 +2,7 @@
using System.Collections.ObjectModel;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
+using VkNet.Model.GroupUpdate;
using VkNet.Utils;
namespace VkNet.Model.Attachments
@@ -13,7 +14,7 @@ namespace VkNet.Model.Attachments
/// См. описание http://vk.com/dev/photo
///
[Serializable]
- public class Photo : MediaAttachment
+ public class Photo : MediaAttachment, IGroupUpdate
{
///
protected override string Alias => "photo";
diff --git a/VkNet/Model/Attachments/Video.cs b/VkNet/Model/Attachments/Video.cs
index 648fa1a38..6397df209 100644
--- a/VkNet/Model/Attachments/Video.cs
+++ b/VkNet/Model/Attachments/Video.cs
@@ -4,6 +4,7 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using VkNet.Infrastructure;
+using VkNet.Model.GroupUpdate;
using VkNet.Utils;
namespace VkNet.Model.Attachments
@@ -16,7 +17,7 @@ namespace VkNet.Model.Attachments
///
[DebuggerDisplay("Id = {Id}, Title = {Title}")]
[Serializable]
- public class Video : MediaAttachment
+ public class Video : MediaAttachment, IGroupUpdate
{
///
protected override string Alias => "video";
diff --git a/VkNet/Model/GroupUpdate/BoardPost.cs b/VkNet/Model/GroupUpdate/BoardPost.cs
index 40d45720e..dc2cbbbff 100644
--- a/VkNet/Model/GroupUpdate/BoardPost.cs
+++ b/VkNet/Model/GroupUpdate/BoardPost.cs
@@ -9,7 +9,7 @@ namespace VkNet.Model.GroupUpdate
/// (CommentBoard с дополнительными полями)
///
[Serializable]
- public class BoardPost : CommentBoard
+ public class BoardPost : CommentBoard, IGroupUpdate
{
///
/// Идентификатор обсуждения
@@ -39,5 +39,22 @@ public class BoardPost : CommentBoard
TopicOwnerId = response["topic_owner_id"]
};
}
+
+ ///
+ /// Преобразование класса в
+ ///
+ /// Ответ сервера.
+ /// Результат преобразования в
+ public static implicit operator BoardPost(VkResponse response)
+ {
+ if (response == null)
+ {
+ return null;
+ }
+
+ return response.HasToken()
+ ? FromJson(response)
+ : null;
+ }
}
}
\ No newline at end of file
diff --git a/VkNet/Model/GroupUpdate/BoardPostDelete.cs b/VkNet/Model/GroupUpdate/BoardPostDelete.cs
index 598e45d83..c94b26fa4 100644
--- a/VkNet/Model/GroupUpdate/BoardPostDelete.cs
+++ b/VkNet/Model/GroupUpdate/BoardPostDelete.cs
@@ -7,7 +7,7 @@ namespace VkNet.Model.GroupUpdate
/// Удаление комментария в обсуждении (BoardPostDelete)
///
[Serializable]
- public class BoardPostDelete
+ public class BoardPostDelete : IGroupUpdate
{
///
/// Идентификатор комментария
@@ -37,5 +37,22 @@ public static BoardPostDelete FromJson(VkResponse response)
TopicOwnerId = response["topic_owner_id"],
};
}
+
+ ///
+ /// Преобразование класса в
+ ///
+ /// Ответ сервера.
+ /// Результат преобразования в
+ public static implicit operator BoardPostDelete(VkResponse response)
+ {
+ if (response == null)
+ {
+ return null;
+ }
+
+ return response.HasToken()
+ ? FromJson(response)
+ : null;
+ }
}
}
\ No newline at end of file
diff --git a/VkNet/Model/GroupUpdate/DonutChanged.cs b/VkNet/Model/GroupUpdate/DonutChanged.cs
index 90038c7d9..0698895f7 100644
--- a/VkNet/Model/GroupUpdate/DonutChanged.cs
+++ b/VkNet/Model/GroupUpdate/DonutChanged.cs
@@ -11,7 +11,7 @@ namespace VkNet.Model.GroupUpdate
/// Добавление участника или заявки на вступление в сообщество
///
[Serializable]
- public class DonutChanged
+ public class DonutChanged : IGroupUpdate
{
///
/// Идентификатор пользователя
@@ -53,5 +53,22 @@ public static DonutChanged FromJson(VkResponse response)
return groupJoin;
}
+
+ ///
+ /// Преобразование класса в
+ ///
+ /// Ответ сервера.
+ /// Результат преобразования в
+ public static implicit operator DonutChanged(VkResponse response)
+ {
+ if (response == null)
+ {
+ return null;
+ }
+
+ return response.HasToken()
+ ? FromJson(response)
+ : null;
+ }
}
}
diff --git a/VkNet/Model/GroupUpdate/DonutEnd.cs b/VkNet/Model/GroupUpdate/DonutEnd.cs
index bc4480f5e..9a6ceeede 100644
--- a/VkNet/Model/GroupUpdate/DonutEnd.cs
+++ b/VkNet/Model/GroupUpdate/DonutEnd.cs
@@ -11,7 +11,7 @@ namespace VkNet.Model.GroupUpdate
/// Добавление участника или заявки на вступление в сообщество
///
[Serializable]
- public class DonutEnd
+ public class DonutEnd : IGroupUpdate
{
///
/// Идентификатор пользователя
@@ -29,5 +29,22 @@ public static DonutEnd FromJson(VkResponse response)
return groupJoin;
}
+
+ ///
+ /// Преобразование класса в
+ ///
+ /// Ответ сервера.
+ /// Результат преобразования в
+ public static implicit operator DonutEnd(VkResponse response)
+ {
+ if (response == null)
+ {
+ return null;
+ }
+
+ return response.HasToken()
+ ? FromJson(response)
+ : null;
+ }
}
}
diff --git a/VkNet/Model/GroupUpdate/DonutNew.cs b/VkNet/Model/GroupUpdate/DonutNew.cs
index 71d0e839b..84498119d 100644
--- a/VkNet/Model/GroupUpdate/DonutNew.cs
+++ b/VkNet/Model/GroupUpdate/DonutNew.cs
@@ -11,7 +11,7 @@ namespace VkNet.Model.GroupUpdate
/// Добавление участника или заявки на вступление в сообщество
///
[Serializable]
- public class DonutNew
+ public class DonutNew : IGroupUpdate
{
///
/// Идентификатор пользователя
@@ -41,5 +41,22 @@ public static DonutNew FromJson(VkResponse response)
return groupJoin;
}
+
+ ///
+ /// Преобразование класса в
+ ///
+ /// Ответ сервера.
+ /// Результат преобразования в
+ public static implicit operator DonutNew(VkResponse response)
+ {
+ if (response == null)
+ {
+ return null;
+ }
+
+ return response.HasToken()
+ ? FromJson(response)
+ : null;
+ }
}
}
diff --git a/VkNet/Model/GroupUpdate/DonutWithdraw.cs b/VkNet/Model/GroupUpdate/DonutWithdraw.cs
index c4b8bf493..e7c813f7b 100644
--- a/VkNet/Model/GroupUpdate/DonutWithdraw.cs
+++ b/VkNet/Model/GroupUpdate/DonutWithdraw.cs
@@ -11,7 +11,7 @@ namespace VkNet.Model.GroupUpdate
/// Добавление участника или заявки на вступление в сообщество
///
[Serializable]
- public class DonutWithdraw
+ public class DonutWithdraw : IGroupUpdate
{
///
/// Произошла ли ошибка
@@ -49,5 +49,22 @@ public static DonutWithdraw FromJson(VkResponse response)
return groupJoin;
}
+
+ ///
+ /// Преобразование класса в
+ ///
+ /// Ответ сервера.
+ /// Результат преобразования в
+ public static implicit operator DonutWithdraw(VkResponse response)
+ {
+ if (response == null)
+ {
+ return null;
+ }
+
+ return response.HasToken()
+ ? FromJson(response)
+ : null;
+ }
}
}
diff --git a/VkNet/Model/GroupUpdate/GroupChangePhoto.cs b/VkNet/Model/GroupUpdate/GroupChangePhoto.cs
index d822c3828..e2c5a35e7 100644
--- a/VkNet/Model/GroupUpdate/GroupChangePhoto.cs
+++ b/VkNet/Model/GroupUpdate/GroupChangePhoto.cs
@@ -8,7 +8,7 @@ namespace VkNet.Model.GroupUpdate
/// Изменение главного фото
///
[Serializable]
- public class GroupChangePhoto
+ public class GroupChangePhoto : IGroupUpdate
{
///
/// Идентификатор пользователя, который внес изменения
@@ -32,5 +32,22 @@ public static GroupChangePhoto FromJson(VkResponse response)
Photo = response["photo"]
};
}
+
+ ///
+ /// Преобразование класса в
+ ///
+ /// Ответ сервера.
+ /// Результат преобразования в
+ public static implicit operator GroupChangePhoto(VkResponse response)
+ {
+ if (response == null)
+ {
+ return null;
+ }
+
+ return response.HasToken()
+ ? FromJson(response)
+ : null;
+ }
}
}
\ No newline at end of file
diff --git a/VkNet/Model/GroupUpdate/GroupJoin.cs b/VkNet/Model/GroupUpdate/GroupJoin.cs
index d5e3922d1..5d33ec52b 100644
--- a/VkNet/Model/GroupUpdate/GroupJoin.cs
+++ b/VkNet/Model/GroupUpdate/GroupJoin.cs
@@ -11,7 +11,7 @@ namespace VkNet.Model.GroupUpdate
/// Добавление участника или заявки на вступление в сообщество
///
[Serializable]
- public class GroupJoin
+ public class GroupJoin : IGroupUpdate
{
///
/// Идентификатор пользователя
@@ -36,5 +36,22 @@ public static GroupJoin FromJson(VkResponse response)
return groupJoin;
}
+
+ ///
+ /// Преобразование класса в
+ ///
+ /// Ответ сервера.
+ /// Результат преобразования в
+ public static implicit operator GroupJoin(VkResponse response)
+ {
+ if (response == null)
+ {
+ return null;
+ }
+
+ return response.HasToken()
+ ? FromJson(response)
+ : null;
+ }
}
}
\ No newline at end of file
diff --git a/VkNet/Model/GroupUpdate/GroupLeave.cs b/VkNet/Model/GroupUpdate/GroupLeave.cs
index 16445fbad..e20da7072 100644
--- a/VkNet/Model/GroupUpdate/GroupLeave.cs
+++ b/VkNet/Model/GroupUpdate/GroupLeave.cs
@@ -7,7 +7,7 @@ namespace VkNet.Model.GroupUpdate
/// Удаление/выход участника из сообщества
///
[Serializable]
- public class GroupLeave
+ public class GroupLeave : IGroupUpdate
{
///
/// Идентификатор пользователя
@@ -31,5 +31,22 @@ public static GroupLeave FromJson(VkResponse response)
IsSelf = response["self"]
};
}
+
+ ///
+ /// Преобразование класса в
+ ///
+ /// Ответ сервера.
+ /// Результат преобразования в
+ public static implicit operator GroupLeave(VkResponse response)
+ {
+ if (response == null)
+ {
+ return null;
+ }
+
+ return response.HasToken()
+ ? FromJson(response)
+ : null;
+ }
}
}
\ No newline at end of file
diff --git a/VkNet/Model/GroupUpdate/GroupOfficersEdit.cs b/VkNet/Model/GroupUpdate/GroupOfficersEdit.cs
index c3d2c9cbe..567aa9448 100644
--- a/VkNet/Model/GroupUpdate/GroupOfficersEdit.cs
+++ b/VkNet/Model/GroupUpdate/GroupOfficersEdit.cs
@@ -10,7 +10,7 @@ namespace VkNet.Model.GroupUpdate
/// Редактирование списка руководителей
///
[Serializable]
- public class GroupOfficersEdit
+ public class GroupOfficersEdit : IGroupUpdate
{
///
/// Идентификатор пользователя
@@ -44,5 +44,22 @@ public static GroupOfficersEdit FromJson(VkResponse response)
{
return JsonConvert.DeserializeObject(response.ToString(), JsonConfigure.JsonSerializerSettings);
}
+
+ ///
+ /// Преобразование класса в
+ ///
+ /// Ответ сервера.
+ /// Результат преобразования в
+ public static implicit operator GroupOfficersEdit(VkResponse response)
+ {
+ if (response == null)
+ {
+ return null;
+ }
+
+ return response.HasToken()
+ ? FromJson(response)
+ : null;
+ }
}
}
\ No newline at end of file
diff --git a/VkNet/Model/GroupUpdate/GroupUpdate.cs b/VkNet/Model/GroupUpdate/GroupUpdate.cs
index 6a47090e2..7b508d266 100644
--- a/VkNet/Model/GroupUpdate/GroupUpdate.cs
+++ b/VkNet/Model/GroupUpdate/GroupUpdate.cs
@@ -1,4 +1,6 @@
using System;
+using System.Linq.Expressions;
+using System.Reflection;
using Newtonsoft.Json;
using VkNet.Enums.SafetyEnums;
using VkNet.Infrastructure;
@@ -14,206 +16,250 @@ namespace VkNet.Model.GroupUpdate
[Serializable]
public class GroupUpdate
{
+ ///
+ /// Экземпляр самого обновления группы.
+ ///
+ public IGroupUpdate Instance { get; private set; }
+
///
/// Тип обновления
///
[JsonConverter(typeof(SafetyEnumJsonConverter))]
+ [Obsolete("Используйте свойство Instance")]
public GroupUpdateType Type { get; set; }
///
/// Сообщение для типов событий с сообщением в ответе.
///
+ [Obsolete("Используйте свойство Instance")]
public MessageNew MessageNew { get; set; }
+
///
/// Собеседник набираеет сообщение
///
+ [Obsolete("Используйте свойство Instance")]
public MessageTypingState MessageTypingState { get; set; }
///
/// Событие о новой отметке "Мне нравится"
///
+ [Obsolete("Используйте свойство Instance")]
public LikeAdd LikeAdd { get; set; }
///
/// Событие о удалении отметки "Мне нравится"
///
+ [Obsolete("Используйте свойство Instance")]
public LikeRemove LikeRemove { get; set; }
///
/// Событие о изменении настроек сообщества
///
+ [Obsolete("Используйте свойство Instance")]
public GroupChangeSettings GroupChangeSettings { get; set; }
///
/// Платёж через VK Pay
///
+ [Obsolete("Используйте свойство Instance")]
public VkPayTransaction VkPayTransaction { get; set; }
///
/// Сообщение callback кнопки для типов событий с сообщением callback кнопок в ответе.
///
+ [Obsolete("Используйте свойство Instance")]
public MessageEvent MessageEvent { get; set; }
///
/// Сообщение для типов событий с сообщением в ответе
/// (MessageEdit, MessageReply, для версий API ниже 5.103 также MessageNew).
///
+ [Obsolete("Используйте свойство Instance")]
public Message Message { get; set; }
///
/// Фотография для типов событий с фотографией в ответе(PhotoNew)
///
+ [Obsolete("Используйте свойство Instance")]
public Photo Photo { get; set; }
///
/// Аудиозапись
///
+ [Obsolete("Используйте свойство Instance")]
public Audio Audio { get; set; }
///
/// Видеозапись
///
+ [Obsolete("Используйте свойство Instance")]
public Video Video { get; set; }
///
/// Подписка на сообщения от сообщества
///
+ [Obsolete("Используйте свойство Instance")]
public MessageAllow MessageAllow { get; set; }
///
/// Новый запрет сообщений от сообщества(MessageDeny)
///
+ [Obsolete("Используйте свойство Instance")]
public MessageDeny MessageDeny { get; set; }
///
/// Добавление/редактирование/восстановление комментария к фотографии
/// (PhotoCommentNew, PhotoCommentEdit, PhotoCommentRestore)
///
+ [Obsolete("Используйте свойство Instance")]
public PhotoComment PhotoComment { get; set; }
///
/// Удаление комментария к фотографии (PhotoCommentDelete)
///
+ [Obsolete("Используйте свойство Instance")]
public PhotoCommentDelete PhotoCommentDelete { get; set; }
///
/// Добавление/редактирование/восстановление комментария к видео
/// (VideoCommentNew, VideoCommentEdit, VideoCommentRestore)
///
+ [Obsolete("Используйте свойство Instance")]
public VideoComment VideoComment { get; set; }
///
/// Удаление комментария к видео (VideoCommentDelete)
///
+ [Obsolete("Используйте свойство Instance")]
public VideoCommentDelete VideoCommentDelete { get; set; }
///
/// Добавление/редактирование/восстановление комментария в обсуждении
/// (BoardPostNew, BoardPostEdit, BoardPostRestore)
///
+ [Obsolete("Используйте свойство Instance")]
public BoardPost BoardPost { get; set; }
///
/// Удаление комментария в обсуждении (BoardPostDelete)
///
+ [Obsolete("Используйте свойство Instance")]
public BoardPostDelete BoardPostDelete { get; set; }
///
/// Изменение главного фото
///
+ [Obsolete("Используйте свойство Instance")]
public GroupChangePhoto GroupChangePhoto { get; set; }
///
/// Добавление участника или заявки на вступление в сообщество
///
+ [Obsolete("Используйте свойство Instance")]
public GroupJoin GroupJoin { get; set; }
///
/// Удаление/выход участника из сообщества
///
+ [Obsolete("Используйте свойство Instance")]
public GroupLeave GroupLeave { get; set; }
///
/// Редактирование списка руководителей
///
+ [Obsolete("Используйте свойство Instance")]
public GroupOfficersEdit GroupOfficersEdit { get; set; }
///
/// Добавление/редактирование/восстановление комментария к товару
/// (MarketCommentNew, MarketCommentEdit, MarketCommentRestore)
///
+ [Obsolete("Используйте свойство Instance")]
public MarketComment MarketComment { get; set; }
///
/// Удаление комментария к товару (MarketCommentDelete)
///
+ [Obsolete("Используйте свойство Instance")]
public MarketCommentDelete MarketCommentDelete { get; set; }
///
/// Добавление голоса в публичном опросе
///
+ [Obsolete("Используйте свойство Instance")]
public PollVoteNew PollVoteNew { get; set; }
///
/// Добавление пользователя в чёрный список
///
+ [Obsolete("Используйте свойство Instance")]
public UserBlock UserBlock { get; set; }
///
/// Удаление пользователя из чёрного списка
///
+ [Obsolete("Используйте свойство Instance")]
public UserUnblock UserUnblock { get; set; }
///
/// Новая запись на стене (WallPost, WallRepost)
///
+ [Obsolete("Используйте свойство Instance")]
public WallPost WallPost { get; set; }
///
/// Добавление/редактирование/восстановление комментария на стене
/// (WallReplyNew, WallReplyEdit, WallReplyRestore)
///
+ [Obsolete("Используйте свойство Instance")]
public WallReply WallReply { get; set; }
///
/// Удаление комментария к записи (WallReplyDelete)
///
+ [Obsolete("Используйте свойство Instance")]
public WallReplyDelete WallReplyDelete { get; set; }
///
/// Cоздание/Продление подписки
/// (DonutSubscriptionCreate, DonutSubscriptionProlonged)
///
+ [Obsolete("Используйте свойство Instance")]
public DonutNew DonutSubscriptionNew { get; set; }
///
/// Подписка истекла/отменена
/// (DonutSubscriptionExpired, DonutSubscriptionCancelled)
///
+ [Obsolete("Используйте свойство Instance")]
public DonutEnd DonutSubscriptionEnd { get; set; }
///
/// Изменение стоимости подписки (DonutSubscriptionPriceChanged)
///
+ [Obsolete("Используйте свойство Instance")]
public DonutChanged DonutSubscriptionPriceChanged { get; set; }
///
/// Вывод денег
/// (DonutMoneyWithdraw, DonutMoneyWithdrawError)
///
+ [Obsolete("Используйте свойство Instance")]
public DonutWithdraw DonutMoneyWithdraw { get; set; }
///
/// ID группы
///
[JsonProperty("group_id")]
+ [Obsolete("Используйте свойство Instance")]
public ulong? GroupId { get; set; }
///
/// Secret Key для Callback
///
[JsonProperty("secret")]
+ [Obsolete("Используйте свойство Instance")]
public string Secret { get; set; }
///
@@ -228,138 +274,82 @@ public class GroupUpdate
///
public static GroupUpdate FromJson(VkResponse response)
{
- var fromJson = JsonConvert.DeserializeObject(response.ToString(), JsonConfigure.JsonSerializerSettings);
-
+ string type = response["type"];
var resObj = response["object"];
+
+ var fromJson = type switch
+ {
+ "message_new" or "message_edit" or "message_reply"
+ => resObj.ContainsKey("client_info")
+ ? CreateTyped(u => u.MessageNew, resObj)
+ : CreateTyped(u => u.Message, resObj),
+ "message_allow" => CreateTyped(u => u.MessageAllow, resObj),
+ "message_typing_state" => CreateTyped(u => u.MessageTypingState, resObj),
+ "vkpay_transaction" => CreateTyped(u => u.VkPayTransaction, resObj),
+ "like_add" => CreateTyped(u => u.LikeAdd, resObj),
+ "like_remove" => CreateTyped(u => u.LikeRemove, resObj),
+ "group_change_settings" => CreateTyped(u => u.GroupChangeSettings, resObj),
+ "message_deny" => CreateTyped(u => u.MessageDeny, resObj),
+ "photo_new" => CreateTyped(u => u.Photo, resObj),
+ "photo_comment_new" or "photo_comment_edit" or "photo_comment_restore" => CreateTyped(u => u.PhotoComment, resObj),
+ "photo_comment_delete" => CreateTyped(u => u.PhotoCommentDelete, resObj),
+ "audio_new" => CreateTyped(u => u.Audio, resObj),
+ "video_new" => CreateTyped(u => u.Video, resObj),
+ "video_comment_new" or "video_comment_edit" or "video_comment_restore" => CreateTyped(u => u.VideoComment, resObj),
+ "video_comment_delete" => CreateTyped(u => u.VideoCommentDelete, resObj),
+ "wall_post_new" or "wall_repost" => CreateTyped(u => u.WallPost, resObj),
+ "wall_reply_new" or "wall_reply_edit" or "wall_reply_restore" => CreateTyped(u => u.WallReply, resObj),
+ "wall_reply_delete" => CreateTyped(u => u.WallReplyDelete, resObj),
+ "board_post_new" or "board_post_edit" or "board_post_restore" => CreateTyped(u => u.BoardPost, resObj),
+ "board_post_delete" => CreateTyped(u => u.BoardPostDelete, resObj),
+ "market_comment_new" or "market_comment_edit" or "market_comment_restore" => CreateTyped(u => u.MarketComment, resObj),
+ "market_comment_delete" => CreateTyped(u => u.MarketCommentDelete, resObj),
+ "group_leave" => CreateTyped(u => u.GroupLeave, resObj),
+ "group_join" => CreateTyped(u => u.GroupJoin, resObj),
+ "user_block" => CreateTyped(u => u.UserBlock, resObj),
+ "user_unblock" => CreateTyped(u => u.UserUnblock, resObj),
+ "poll_vote_new" => CreateTyped(u => u.PollVoteNew, resObj),
+ "group_change_photo" => CreateTyped(u => u.GroupChangePhoto, resObj),
+ "group_officers_edit" => CreateTyped(u => u.GroupOfficersEdit, resObj),
+ "message_event" => CreateTyped(u => u.MessageEvent, resObj),
+ "donut_subscription_create" or "donut_subscription_prolonged" => CreateTyped(u => u.DonutSubscriptionNew, resObj),
+ "donut_subscription_cancelled" or "donut_subscription_expired" => CreateTyped(u => u.DonutSubscriptionEnd, resObj),
+ "donut_subscription_price_changed" => CreateTyped(u => u.DonutSubscriptionPriceChanged, resObj),
+ "donut_money_withdraw" or "donut_money_withdraw_error" => CreateTyped(u => u.DonutMoneyWithdraw, resObj),
+ var _ => JsonConvert.DeserializeObject(response.ToString(), JsonConfigure.JsonSerializerSettings)
+ };
+
+ fromJson!.Type = GroupUpdateType.FromJsonString(type);
fromJson.Raw = resObj;
+ fromJson.GroupId = response["group_id"];
+
+ return fromJson;
+ }
+
+ #region Приватные методы
- if (fromJson.Type == GroupUpdateType.MessageNew
- || fromJson.Type == GroupUpdateType.MessageEdit
- || fromJson.Type == GroupUpdateType.MessageReply)
+ private static GroupUpdate CreateTyped(
+ Expression> propertySelector,
+ TGroupUpdate instance)
+ where TGroupUpdate : IGroupUpdate
+ {
+ var update = new GroupUpdate
{
- if (resObj.ContainsKey("client_info"))
- {
- fromJson.MessageNew = resObj;
- }
- else
+ Instance = instance,
+ };
+
+ // для сохранения обратной совместимости с публичными свойствами.
+ if (propertySelector.Body is MemberExpression
{
- fromJson.Message = resObj;
- }
- } else if (fromJson.Type == GroupUpdateType.MessageAllow)
- {
- fromJson.MessageAllow = MessageAllow.FromJson(resObj);
- } else if (fromJson.Type == GroupUpdateType.MessageTypingState)
- {
- fromJson.MessageTypingState = MessageTypingState.FromJson(resObj);
- }else if (fromJson.Type == GroupUpdateType.VkPayTransaction)
- {
- fromJson.VkPayTransaction = VkPayTransaction.FromJson(resObj);
- }else if (fromJson.Type == GroupUpdateType.LikeAdd)
- {
- fromJson.LikeAdd = LikeAdd.FromJson(resObj);
- }else if (fromJson.Type == GroupUpdateType.LikeRemove)
- {
- fromJson.LikeRemove = LikeRemove.FromJson(resObj);
- }else if (fromJson.Type == GroupUpdateType.GroupChangeSettings)
- {
- fromJson.GroupChangeSettings = GroupChangeSettings.FromJson(resObj);
- }else if (fromJson.Type == GroupUpdateType.MessageDeny)
- {
- fromJson.MessageDeny = MessageDeny.FromJson(resObj);
- } else if (fromJson.Type == GroupUpdateType.PhotoNew)
- {
- fromJson.Photo = resObj;
- } else if (fromJson.Type == GroupUpdateType.PhotoCommentNew
- || fromJson.Type == GroupUpdateType.PhotoCommentEdit
- || fromJson.Type == GroupUpdateType.PhotoCommentRestore)
- {
- fromJson.PhotoComment = PhotoComment.FromJson(resObj);
- } else if (fromJson.Type == GroupUpdateType.PhotoCommentDelete)
- {
- fromJson.PhotoCommentDelete = PhotoCommentDelete.FromJson(resObj);
- } else if (fromJson.Type == GroupUpdateType.AudioNew)
- {
- fromJson.Audio = resObj;
- } else if (fromJson.Type == GroupUpdateType.VideoNew)
+ Member: PropertyInfo propertyInfo
+ })
{
- fromJson.Video = resObj;
- } else if (fromJson.Type == GroupUpdateType.VideoCommentNew
- || fromJson.Type == GroupUpdateType.VideoCommentEdit
- || fromJson.Type == GroupUpdateType.VideoCommentRestore)
- {
- fromJson.VideoComment = VideoComment.FromJson(resObj);
- } else if (fromJson.Type == GroupUpdateType.VideoCommentDelete)
- {
- fromJson.VideoCommentDelete = VideoCommentDelete.FromJson(resObj);
- } else if (fromJson.Type == GroupUpdateType.WallPostNew || fromJson.Type == GroupUpdateType.WallRepost)
- {
- fromJson.WallPost = WallPost.FromJson(resObj);
- } else if (fromJson.Type == GroupUpdateType.WallReplyNew
- || fromJson.Type == GroupUpdateType.WallReplyEdit
- || fromJson.Type == GroupUpdateType.WallReplyRestore)
- {
- fromJson.WallReply = WallReply.FromJson(resObj);
- } else if (fromJson.Type == GroupUpdateType.WallReplyDelete)
- {
- fromJson.WallReplyDelete = WallReplyDelete.FromJson(resObj);
- } else if (fromJson.Type == GroupUpdateType.BoardPostNew
- || fromJson.Type == GroupUpdateType.BoardPostEdit
- || fromJson.Type == GroupUpdateType.BoardPostRestore)
- {
- fromJson.BoardPost = BoardPost.FromJson(resObj);
- } else if (fromJson.Type == GroupUpdateType.BoardPostDelete)
- {
- fromJson.BoardPostDelete = BoardPostDelete.FromJson(resObj);
- } else if (fromJson.Type == GroupUpdateType.MarketCommentNew
- || fromJson.Type == GroupUpdateType.MarketCommentEdit
- || fromJson.Type == GroupUpdateType.MarketCommentRestore)
- {
- fromJson.MarketComment = MarketComment.FromJson(resObj);
- } else if (fromJson.Type == GroupUpdateType.MarketCommentDelete)
- {
- fromJson.MarketCommentDelete = MarketCommentDelete.FromJson(resObj);
- } else if (fromJson.Type == GroupUpdateType.GroupLeave)
- {
- fromJson.GroupLeave = GroupLeave.FromJson(resObj);
- } else if (fromJson.Type == GroupUpdateType.GroupJoin)
- {
- fromJson.GroupJoin = GroupJoin.FromJson(resObj);
- } else if (fromJson.Type == GroupUpdateType.UserBlock)
- {
- fromJson.UserBlock = UserBlock.FromJson(resObj);
- } else if (fromJson.Type == GroupUpdateType.UserUnblock)
- {
- fromJson.UserUnblock = UserUnblock.FromJson(resObj);
- } else if (fromJson.Type == GroupUpdateType.PollVoteNew)
- {
- fromJson.PollVoteNew = PollVoteNew.FromJson(resObj);
- } else if (fromJson.Type == GroupUpdateType.GroupChangePhoto)
- {
- fromJson.GroupChangePhoto = GroupChangePhoto.FromJson(resObj);
- } else if (fromJson.Type == GroupUpdateType.GroupOfficersEdit)
- {
- fromJson.GroupOfficersEdit = GroupOfficersEdit.FromJson(resObj);
- } else if (fromJson.Type == GroupUpdateType.MessageEvent)
- {
- fromJson.MessageEvent = MessageEvent.FromJson(resObj);
- } else if (fromJson.Type == GroupUpdateType.DonutSubscriptionCreate
- || fromJson.Type == GroupUpdateType.DonutSubscriptionProlonged)
- {
- fromJson.DonutSubscriptionNew = DonutNew.FromJson(resObj);
- } else if (fromJson.Type == GroupUpdateType.DonutSubscriptionCanceled
- || fromJson.Type == GroupUpdateType.DonutSubscriptionExpired)
- {
- fromJson.DonutSubscriptionEnd = DonutEnd.FromJson(resObj);
- } else if (fromJson.Type == GroupUpdateType.DonutSubscriptionPriceChanged)
- {
- fromJson.DonutSubscriptionPriceChanged = DonutChanged.FromJson(resObj);
- } else if (fromJson.Type == GroupUpdateType.DonutMoneyWithdraw
- || fromJson.Type == GroupUpdateType.DonutMoneyWithdrawError)
- {
- fromJson.DonutMoneyWithdraw = DonutWithdraw.FromJson(resObj);
+ propertyInfo.SetValue(update, instance);
}
- return fromJson;
+ return update;
}
+
+ #endregion
}
}
\ No newline at end of file
diff --git a/VkNet/Model/GroupUpdate/IGroupUpdate.cs b/VkNet/Model/GroupUpdate/IGroupUpdate.cs
new file mode 100644
index 000000000..60208aa16
--- /dev/null
+++ b/VkNet/Model/GroupUpdate/IGroupUpdate.cs
@@ -0,0 +1,9 @@
+namespace VkNet.Model.GroupUpdate;
+
+///
+/// Интерфейс-маркер для обновлений группы
+///
+public interface IGroupUpdate
+{
+
+}
\ No newline at end of file
diff --git a/VkNet/Model/GroupUpdate/MarketComment.cs b/VkNet/Model/GroupUpdate/MarketComment.cs
index 16f770b65..7dda861a3 100644
--- a/VkNet/Model/GroupUpdate/MarketComment.cs
+++ b/VkNet/Model/GroupUpdate/MarketComment.cs
@@ -10,7 +10,7 @@ namespace VkNet.Model.GroupUpdate
/// (Comment с дополнительными полями)
///
[Serializable]
- public class MarketComment : Comment
+ public class MarketComment : Comment, IGroupUpdate
{
///
/// Идентификатор товара
@@ -42,5 +42,22 @@ public class MarketComment : Comment
MarketOwnerId = response["market_owner_id"]
};
}
+
+ ///
+ /// Преобразование класса в
+ ///
+ /// Ответ сервера.
+ /// Результат преобразования в
+ public static implicit operator MarketComment(VkResponse response)
+ {
+ if (response == null)
+ {
+ return null;
+ }
+
+ return response.HasToken()
+ ? FromJson(response)
+ : null;
+ }
}
}
\ No newline at end of file
diff --git a/VkNet/Model/GroupUpdate/MarketCommentDelete.cs b/VkNet/Model/GroupUpdate/MarketCommentDelete.cs
index c5fb71635..16437a1f3 100644
--- a/VkNet/Model/GroupUpdate/MarketCommentDelete.cs
+++ b/VkNet/Model/GroupUpdate/MarketCommentDelete.cs
@@ -7,7 +7,7 @@ namespace VkNet.Model.GroupUpdate
/// Удаление комментария к товару (MarketCommentDelete)
///
[Serializable]
- public class MarketCommentDelete
+ public class MarketCommentDelete : IGroupUpdate
{
///
/// Идентификатор комментария
@@ -49,5 +49,22 @@ public static MarketCommentDelete FromJson(VkResponse response)
DeleterId = response["deleter_id"]
};
}
+
+ ///
+ /// Преобразование класса в
+ ///
+ /// Ответ сервера.
+ /// Результат преобразования в
+ public static implicit operator MarketCommentDelete(VkResponse response)
+ {
+ if (response == null)
+ {
+ return null;
+ }
+
+ return response.HasToken()
+ ? FromJson(response)
+ : null;
+ }
}
}
\ No newline at end of file
diff --git a/VkNet/Model/GroupUpdate/MessageAllow.cs b/VkNet/Model/GroupUpdate/MessageAllow.cs
index 5b254ec1d..a592046dc 100644
--- a/VkNet/Model/GroupUpdate/MessageAllow.cs
+++ b/VkNet/Model/GroupUpdate/MessageAllow.cs
@@ -7,7 +7,7 @@ namespace VkNet.Model.GroupUpdate
/// Подписка на сообщения от сообщества (MessageAllow, ваш капитан!)
///
[Serializable]
- public class MessageAllow
+ public class MessageAllow : IGroupUpdate
{
///
/// Идентификатор пользователя
@@ -31,5 +31,22 @@ public static MessageAllow FromJson(VkResponse response)
Key = response["key"]
};
}
+
+ ///
+ /// Преобразование класса в
+ ///
+ /// Ответ сервера.
+ /// Результат преобразования в
+ public static implicit operator MessageAllow(VkResponse response)
+ {
+ if (response == null)
+ {
+ return null;
+ }
+
+ return response.HasToken()
+ ? FromJson(response)
+ : null;
+ }
}
}
\ No newline at end of file
diff --git a/VkNet/Model/GroupUpdate/MessageDeny.cs b/VkNet/Model/GroupUpdate/MessageDeny.cs
index c0c2ce5a8..41326b4e6 100644
--- a/VkNet/Model/GroupUpdate/MessageDeny.cs
+++ b/VkNet/Model/GroupUpdate/MessageDeny.cs
@@ -7,7 +7,7 @@ namespace VkNet.Model.GroupUpdate
/// Новый запрет сообщений от сообщества (MessageDeny)
///
[Serializable]
- public class MessageDeny
+ public class MessageDeny : IGroupUpdate
{
///
/// Идентификатор пользователя
@@ -22,5 +22,22 @@ public static MessageDeny FromJson(VkResponse response)
{
return new MessageDeny { UserId = response["user_id"] };
}
+
+ ///
+ /// Преобразование класса в
+ ///
+ /// Ответ сервера.
+ /// Результат преобразования в
+ public static implicit operator MessageDeny(VkResponse response)
+ {
+ if (response == null)
+ {
+ return null;
+ }
+
+ return response.HasToken()
+ ? FromJson(response)
+ : null;
+ }
}
}
\ No newline at end of file
diff --git a/VkNet/Model/GroupUpdate/MessageEvent.cs b/VkNet/Model/GroupUpdate/MessageEvent.cs
index e3a4abb6e..11ddb23b2 100644
--- a/VkNet/Model/GroupUpdate/MessageEvent.cs
+++ b/VkNet/Model/GroupUpdate/MessageEvent.cs
@@ -8,7 +8,7 @@ namespace VkNet.Model.GroupUpdate
/// Объект, который содержит сообщение и информацию о доступных пользователю функциях.
///
[Serializable]
- public class MessageEvent
+ public class MessageEvent : IGroupUpdate
{
///
/// Идентификатор пользователя.
diff --git a/VkNet/Model/GroupUpdate/MessageNew.cs b/VkNet/Model/GroupUpdate/MessageNew.cs
index e11898ecd..b1ccbd8c5 100644
--- a/VkNet/Model/GroupUpdate/MessageNew.cs
+++ b/VkNet/Model/GroupUpdate/MessageNew.cs
@@ -8,7 +8,7 @@ namespace VkNet.Model.GroupUpdate
/// Объект, который содержит сообщение и информацию о доступных пользователю функциях.
///
[Serializable]
- public class MessageNew
+ public class MessageNew : IGroupUpdate
{
///
/// Сообщение.
diff --git a/VkNet/Model/GroupUpdate/PhotoComment.cs b/VkNet/Model/GroupUpdate/PhotoComment.cs
index ae704c694..a53070bfa 100644
--- a/VkNet/Model/GroupUpdate/PhotoComment.cs
+++ b/VkNet/Model/GroupUpdate/PhotoComment.cs
@@ -10,7 +10,7 @@ namespace VkNet.Model.GroupUpdate
/// (Comment с дополнительными полями)
///
[Serializable]
- public class PhotoComment : Comment
+ public class PhotoComment : Comment, IGroupUpdate
{
///
/// Идентификатор фотографии
@@ -42,5 +42,22 @@ public class PhotoComment : Comment
PhotoOwnerId = response["photo_owner_id"]
};
}
+
+ ///
+ /// Преобразование класса в
+ ///
+ /// Ответ сервера.
+ /// Результат преобразования в
+ public static implicit operator PhotoComment(VkResponse response)
+ {
+ if (response == null)
+ {
+ return null;
+ }
+
+ return response.HasToken()
+ ? FromJson(response)
+ : null;
+ }
}
}
\ No newline at end of file
diff --git a/VkNet/Model/GroupUpdate/PhotoCommentDelete.cs b/VkNet/Model/GroupUpdate/PhotoCommentDelete.cs
index d5098b2a8..af32d6a7d 100644
--- a/VkNet/Model/GroupUpdate/PhotoCommentDelete.cs
+++ b/VkNet/Model/GroupUpdate/PhotoCommentDelete.cs
@@ -7,7 +7,7 @@ namespace VkNet.Model.GroupUpdate
/// Удаление комментария к фотографии (PhotoCommentDelete)
///
[Serializable]
- public class PhotoCommentDelete
+ public class PhotoCommentDelete : IGroupUpdate
{
///
/// Идентификатор комментария
@@ -49,5 +49,22 @@ public static PhotoCommentDelete FromJson(VkResponse response)
DeleterId = response["deleter_id"]
};
}
+
+ ///
+ /// Преобразование класса в
+ ///
+ /// Ответ сервера.
+ /// Результат преобразования в
+ public static implicit operator PhotoCommentDelete(VkResponse response)
+ {
+ if (response == null)
+ {
+ return null;
+ }
+
+ return response.HasToken()
+ ? FromJson(response)
+ : null;
+ }
}
}
\ No newline at end of file
diff --git a/VkNet/Model/GroupUpdate/PollVoteNew.cs b/VkNet/Model/GroupUpdate/PollVoteNew.cs
index 62714262c..8c8b91cb8 100644
--- a/VkNet/Model/GroupUpdate/PollVoteNew.cs
+++ b/VkNet/Model/GroupUpdate/PollVoteNew.cs
@@ -7,7 +7,7 @@ namespace VkNet.Model.GroupUpdate
/// Добавление голоса в публичном опросе
///
[Serializable]
- public class PollVoteNew
+ public class PollVoteNew : IGroupUpdate
{
///
/// Идентификатор пользователя
@@ -43,5 +43,22 @@ public static PollVoteNew FromJson(VkResponse response)
OwnerId = response["owner_id"]
};
}
+
+ ///
+ /// Преобразование класса в
+ ///
+ /// Ответ сервера.
+ /// Результат преобразования в
+ public static implicit operator PollVoteNew(VkResponse response)
+ {
+ if (response == null)
+ {
+ return null;
+ }
+
+ return response.HasToken()
+ ? FromJson(response)
+ : null;
+ }
}
}
\ No newline at end of file
diff --git a/VkNet/Model/GroupUpdate/UserBlock.cs b/VkNet/Model/GroupUpdate/UserBlock.cs
index cb6bccc89..8c33187c2 100644
--- a/VkNet/Model/GroupUpdate/UserBlock.cs
+++ b/VkNet/Model/GroupUpdate/UserBlock.cs
@@ -11,7 +11,7 @@ namespace VkNet.Model.GroupUpdate
/// Добавление пользователя в чёрный список
///
[Serializable]
- public class UserBlock
+ public class UserBlock : IGroupUpdate
{
///
/// Идентификатор пользователя
@@ -55,5 +55,22 @@ public static UserBlock FromJson(VkResponse response)
return userBlock;
}
+
+ ///
+ /// Преобразование класса в
+ ///
+ /// Ответ сервера.
+ /// Результат преобразования в
+ public static implicit operator UserBlock(VkResponse response)
+ {
+ if (response == null)
+ {
+ return null;
+ }
+
+ return response.HasToken()
+ ? FromJson(response)
+ : null;
+ }
}
}
\ No newline at end of file
diff --git a/VkNet/Model/GroupUpdate/UserUnblock.cs b/VkNet/Model/GroupUpdate/UserUnblock.cs
index bc15be0b2..bc32b4a9b 100644
--- a/VkNet/Model/GroupUpdate/UserUnblock.cs
+++ b/VkNet/Model/GroupUpdate/UserUnblock.cs
@@ -7,7 +7,7 @@ namespace VkNet.Model.GroupUpdate
/// Удаление пользователя из чёрного списка
///
[Serializable]
- public class UserUnblock
+ public class UserUnblock : IGroupUpdate
{
///
/// Идентификатор пользователя
@@ -37,5 +37,22 @@ public static UserUnblock FromJson(VkResponse response)
ByEndDate = (long) response["by_end_date"] > 0
};
}
+
+ ///
+ /// Преобразование класса в
+ ///
+ /// Ответ сервера.
+ /// Результат преобразования в
+ public static implicit operator UserUnblock(VkResponse response)
+ {
+ if (response == null)
+ {
+ return null;
+ }
+
+ return response.HasToken()
+ ? FromJson(response)
+ : null;
+ }
}
}
\ No newline at end of file
diff --git a/VkNet/Model/GroupUpdate/VideoComment.cs b/VkNet/Model/GroupUpdate/VideoComment.cs
index 7910cde0b..d31dffff2 100644
--- a/VkNet/Model/GroupUpdate/VideoComment.cs
+++ b/VkNet/Model/GroupUpdate/VideoComment.cs
@@ -10,7 +10,7 @@ namespace VkNet.Model.GroupUpdate
/// (Comment с дополнительными полями)
///
[Serializable]
- public class VideoComment : Comment
+ public class VideoComment : Comment, IGroupUpdate
{
///
/// Идентификатор видеозаписи
@@ -42,5 +42,22 @@ public class VideoComment : Comment
VideoOwnerId = response["video_owner_id"]
};
}
+
+ ///
+ /// Преобразование класса в
+ ///
+ /// Ответ сервера.
+ /// Результат преобразования в
+ public static implicit operator VideoComment(VkResponse response)
+ {
+ if (response == null)
+ {
+ return null;
+ }
+
+ return response.HasToken()
+ ? FromJson(response)
+ : null;
+ }
}
}
\ No newline at end of file
diff --git a/VkNet/Model/GroupUpdate/VideoCommentDelete.cs b/VkNet/Model/GroupUpdate/VideoCommentDelete.cs
index 95dba9e6f..e6c69ea36 100644
--- a/VkNet/Model/GroupUpdate/VideoCommentDelete.cs
+++ b/VkNet/Model/GroupUpdate/VideoCommentDelete.cs
@@ -7,7 +7,7 @@ namespace VkNet.Model.GroupUpdate
/// Удаление комментария к видео (VideoCommentDelete)
///
[Serializable]
- public class VideoCommentDelete
+ public class VideoCommentDelete : IGroupUpdate
{
///
/// Идентификатор комментария
@@ -49,5 +49,22 @@ public static VideoCommentDelete FromJson(VkResponse response)
DeleterId = response["deleter_id"]
};
}
+
+ ///
+ /// Преобразование класса в
+ ///
+ /// Ответ сервера.
+ /// Результат преобразования в
+ public static implicit operator VideoCommentDelete(VkResponse response)
+ {
+ if (response == null)
+ {
+ return null;
+ }
+
+ return response.HasToken()
+ ? FromJson(response)
+ : null;
+ }
}
}
\ No newline at end of file
diff --git a/VkNet/Model/GroupUpdate/WallPost.cs b/VkNet/Model/GroupUpdate/WallPost.cs
index b59040fdc..54e286817 100644
--- a/VkNet/Model/GroupUpdate/WallPost.cs
+++ b/VkNet/Model/GroupUpdate/WallPost.cs
@@ -9,7 +9,7 @@ namespace VkNet.Model.GroupUpdate
/// (Post с дополнительными полями)
///
[Serializable]
- public class WallPost : Post
+ public class WallPost : Post, IGroupUpdate
{
///
/// Id отложенной записи
@@ -60,5 +60,22 @@ public class WallPost : Post
Donut = response["donut"]
};
}
+
+ ///
+ /// Преобразование класса в
+ ///
+ /// Ответ сервера.
+ /// Результат преобразования в
+ public static implicit operator WallPost(VkResponse response)
+ {
+ if (response == null)
+ {
+ return null;
+ }
+
+ return response.HasToken()
+ ? FromJson(response)
+ : null;
+ }
}
}
\ No newline at end of file
diff --git a/VkNet/Model/GroupUpdate/WallReply.cs b/VkNet/Model/GroupUpdate/WallReply.cs
index 60e1901b4..77f620171 100644
--- a/VkNet/Model/GroupUpdate/WallReply.cs
+++ b/VkNet/Model/GroupUpdate/WallReply.cs
@@ -10,7 +10,7 @@ namespace VkNet.Model.GroupUpdate
/// (Comment с дополнительными полями)
///
[Serializable]
- public class WallReply : Comment
+ public class WallReply : Comment, IGroupUpdate
{
///
/// Идентификатор записи
@@ -42,5 +42,22 @@ public class WallReply : Comment
PostOwnerId = response["post_owner_id"]
};
}
+
+ ///
+ /// Преобразование класса в
+ ///
+ /// Ответ сервера.
+ /// Результат преобразования в
+ public static implicit operator WallReply(VkResponse response)
+ {
+ if (response == null)
+ {
+ return null;
+ }
+
+ return response.HasToken()
+ ? FromJson(response)
+ : null;
+ }
}
}
\ No newline at end of file
diff --git a/VkNet/Model/GroupUpdate/WallReplyDelete.cs b/VkNet/Model/GroupUpdate/WallReplyDelete.cs
index 3a3cc469b..7ebc12699 100644
--- a/VkNet/Model/GroupUpdate/WallReplyDelete.cs
+++ b/VkNet/Model/GroupUpdate/WallReplyDelete.cs
@@ -7,7 +7,7 @@ namespace VkNet.Model.GroupUpdate
/// Удаление комментария к записи (WallReplyDelete)
///
[Serializable]
- public class WallReplyDelete
+ public class WallReplyDelete : IGroupUpdate
{
///
/// Идентификатор комментария
@@ -49,5 +49,22 @@ public static WallReplyDelete FromJson(VkResponse response)
DeleterId = response["deleter_id"]
};
}
+
+ ///
+ /// Преобразование класса в
+ ///
+ /// Ответ сервера.
+ /// Результат преобразования в
+ public static implicit operator WallReplyDelete(VkResponse response)
+ {
+ if (response == null)
+ {
+ return null;
+ }
+
+ return response.HasToken()
+ ? FromJson(response)
+ : null;
+ }
}
}
\ No newline at end of file