Я получаю данные JSON вроде этого от стороннего API, который я не могу изменить:Как десериализовать [[int, int, int, int, string, string], [...]] от JSON
{"ts":1234567890,"updates":[[4,104482,8209,2000000007,1462994403,"some text","some text again",{"from":"1337"}],[80,7,0],[7,2000000007,104481],[62,76706856,7]]}
Я попробовал этот код десериализацию его:
public class LongpollData
{
public ulong Ts { get; set; }
public List<Tuple<ApiEvent, int, ApiMask, ulong?, ulong?, string, string, FromInfo>> Updates { get; set; }
public class FromInfo
{
string From { get; set; }
}
public enum ApiEvent
{
delete = 0,
replace = 1,
setMessageFlags = 2,
resetMessageFlags = 3,
newMessage = 4,
readAllIn = 6,
readAllOut = 7,
friendIsOnline = 8,
friendIsOffline = 9,
chatChanged = 51,
userIsTyping = 61,
userIsTypingIn = 62,
userMadeCall = 70,
unreadMessagesCount = 80,
notificationSettingsChanged = 144,
}
[Flags]
public enum ApiMask
{
UNREAD = 1,
OUTBOX = 2,
REPLIED = 4,
IMPORTANT = 8,
CHAT = 16,
FRIENDS = 32,
SPAM = 64,
DELЕTЕD = 128,
FIXED = 256,
MEDIA = 512,
}
}
...
var UpdateData = JsonConvert.DeserializeObject<LongpollData>(webData);
, но я получаю исключение:
не может десериализации текущего массива JSON (например, [1,2,3]) в тип 'System.Tuple
8[VkKonekoBot.vkLongpollEvents+LongpollData+ApiEvent,System.Int32,VkKonekoBot.vkLongpollEvents+LongpollData+ApiMask,System.Nullable
1 [System.UInt64], System.Nullable`1 [System.UInt64], System.String, System.String, VkKonekoBot.vkLongpollEvents + LongpollData + FromInfo] ', потому что для этого типа требуется объект JSON (например, {\ "name \": \ "value \"}) для десериализации правильно. \ r \ nЧтобы исправить эту ошибку, либо измените JSON на объект JSON (например, {\ "name \": \ "value \"}), либо измените десериализованный тип на массив или тип, который реализует интерфейс коллекции (например, ICollection, IList), например List, который можно десериализовать из массива JSON. JsonArrayAttribute также может быть добавлен к типу, чтобы заставить его десериализацию из массива JSON. \ Г \ nPath 'Обновление [0], строка 1, позиция 29.
Что я делаю неправильно?
и если поле Updates пустое (похоже на это: '..." updates ": []}') работает правильно – NOiSY
Попробуйте изменить тип Обновления на объект [] – Gusman
wow, это работает! но как я могу преобразовать 'object []' в 'List>'? –
NOiSY