public override object Deserialize(IJsonReader reader) { if (reader == null) { throw new ArgumentNullException("reader"); } if (reader.Token == JsonToken.Null) { return(null); } var value = new Vector4(); reader.ReadArrayBegin(); int idx = 0; while (reader.Token != JsonToken.EndOfArray) { value[idx++] = reader.ReadSingle(); } reader.ReadArrayEnd(nextToken: false); return(value); }
public override object Deserialize(IJsonReader reader) { if (reader == null) { throw new ArgumentNullException("reader"); } if (reader.Token == JsonToken.BeginArray) { var entry = new DictionaryEntry(); reader.ReadArrayBegin(); entry.Key = reader.ReadValue(typeof(object)); entry.Value = reader.ReadValue(typeof(object)); reader.ReadArrayEnd(nextToken: false); return(entry); } else if (reader.Token == JsonToken.BeginObject) { var entry = new DictionaryEntry(); reader.ReadObjectBegin(); while (reader.Token != JsonToken.EndOfObject) { var memberName = reader.ReadMember(); switch (memberName) { case KEY_MEMBER_NAME: entry.Key = reader.ReadValue(typeof(object)); break; case VALUE_MEMBER_NAME: entry.Value = reader.ReadValue(typeof(object)); break; case ObjectSerializer.TYPE_MEMBER_NAME: reader.ReadValue(typeof(object)); break; default: throw new SerializationException(string.Format("Unknown member found '{0}' while '{1}' or '{2}' are expected.", memberName, KEY_MEMBER_NAME, VALUE_MEMBER_NAME)); } } reader.ReadObjectEnd(nextToken: false); return(entry); } else { throw JsonSerializationException.UnexpectedToken(reader, JsonToken.BeginObject, JsonToken.BeginArray); } }
private void SkipArray(IJsonReader reader, bool alreadyStarted) { if (!alreadyStarted) { reader.ReadArrayBegin(); } int arrayBegins = 1; while (arrayBegins > 0) { switch (reader.Token) { case JsonToken.BeginArray: arrayBegins++; break; case JsonToken.EndOfArray: arrayBegins--; break; } reader.NextToken(); } }
public override object Deserialize(IJsonReader reader) { if (reader == null) { throw new ArgumentNullException("reader"); } var container = new List <DictionaryEntry>(); reader.Context.Hierarchy.Push(container); try { if (reader.Token == JsonToken.BeginArray) { reader.ReadArrayBegin(); while (reader.Token != JsonToken.EndOfArray) { var entry = default(DictionaryEntry); if (reader.Token == JsonToken.BeginArray) { reader.ReadArrayBegin(); try { entry.Key = reader.ReadValue(this.keyType); } catch (Exception e) { throw new SerializationException(string.Format("Failed to read '{0}' key of dictionary: {1}\r\nMore detailed information in inner exception.", this.keyType.Name, e.Message), e); } try { entry.Value = reader.ReadValue(this.valueType); } catch (Exception e) { throw new SerializationException(string.Format("Failed to read '{0}' value for key '{1}' in dictionary: {2}\r\nMore detailed information in inner exception.", this.valueType.Name, entry.Key, e.Message), e); } reader.ReadArrayEnd(); } else { reader.ReadObjectBegin(); while (reader.Token != JsonToken.EndOfObject) { var memberName = reader.ReadMember(); switch (memberName) { case DictionaryEntrySerializer.KEY_MEMBER_NAME: try { entry.Key = reader.ReadValue(this.keyType); } catch (Exception e) { throw new SerializationException(string.Format("Failed to read '{0}' key of dictionary: {1}\r\nMore detailed information in inner exception.", this.keyType.Name, e.Message), e); } break; case DictionaryEntrySerializer.VALUE_MEMBER_NAME: try { entry.Value = reader.ReadValue(this.valueType); } catch (Exception e) { throw new SerializationException(string.Format("Failed to read '{0}' value for key '{1}' in dictionary: {2}\r\nMore detailed information in inner exception.", this.valueType.Name, entry.Key ?? "<unknown>", e.Message), e); } break; case ObjectSerializer.TYPE_MEMBER_NAME: reader.ReadValue(typeof(object)); break; default: throw new SerializationException(string.Format("Unknown member found '{0}' in dictionary entry while '{1}' or '{2}' are expected.", memberName, DictionaryEntrySerializer.KEY_MEMBER_NAME, DictionaryEntrySerializer.VALUE_MEMBER_NAME)); } } reader.ReadObjectEnd(); } container.Add(entry); } reader.ReadArrayEnd(nextToken: false); } else if (reader.Token == JsonToken.BeginObject) { reader.ReadObjectBegin(); while (reader.Token != JsonToken.EndOfObject) { var entry = default(DictionaryEntry); try { entry.Key = reader.ReadValue(this.keyType); } catch (Exception e) { throw new SerializationException(string.Format("Failed to read '{0}' key of dictionary: {1}\r\nMore detailed information in inner exception.", this.keyType.Name, e.Message), e); } try { entry.Value = reader.ReadValue(this.valueType); } catch (Exception e) { throw new SerializationException(string.Format("Failed to read '{0}' value for key '{1}' in dictionary: {2}\r\nMore detailed information in inner exception.", this.valueType.Name, entry.Key, e.Message), e); } container.Add(entry); } reader.ReadObjectEnd(nextToken: false); } else { throw JsonSerializationException.UnexpectedToken(reader, JsonToken.BeginObject, JsonToken.BeginArray); } var dictionary = (IDictionary)Activator.CreateInstance(this.instantiatedDictionaryType); foreach (var kv in container) { var key = kv.Key; var value = kv.Value; if (key.GetType() != this.keyType && this.keyType != typeof(object)) { if (this.keyType.IsEnum) { key = Enum.Parse(this.keyType, Convert.ToString(key)); } else { key = Convert.ChangeType(key, this.keyType); } } if (dictionary.Contains(key)) { dictionary.Remove(key); } dictionary.Add(key, value); } return(dictionary); } finally { reader.Context.Hierarchy.Pop(); } }
private (string, object[]) ReadData(SocketManager manager, IncomingPacket packet, IJsonReader reader) { Socket socket = manager.GetSocket(packet.Namespace); string eventName = packet.EventName; Subscription subscription = socket.GetSubscription(eventName); object[] args = null; switch (packet.SocketIOEvent) { case SocketIOEventTypes.Unknown: // TODO: Error? break; case SocketIOEventTypes.Connect: // No Data | Object args = ReadParameters(socket, subscription, reader); //SkipObject(reader); break; case SocketIOEventTypes.Disconnect: // No Data break; case SocketIOEventTypes.Error: // String | Object switch (reader.Token) { case JsonToken.StringLiteral: args = new object[] { new Error(reader.ReadString()) }; break; case JsonToken.BeginObject: args = ReadParameters(socket, subscription, reader); if (subscription == null && args == null) { SkipObject(reader); } break; } break; case SocketIOEventTypes.Ack: eventName = IncomingPacket.GenerateAcknowledgementNameFromId(packet.Id); subscription = socket.GetSubscription(eventName); reader.ReadArrayBegin(); args = ReadParameters(socket, subscription, reader); reader.ReadArrayEnd(); break; default: // Array reader.ReadArrayBegin(); eventName = reader.ReadString(); subscription = socket.GetSubscription(eventName); args = ReadParameters(socket, subscription, reader); reader.ReadArrayEnd(); break; } return(eventName, args); }