public override object Deserialize(IJsonReader reader) { if (reader == null) { throw new ArgumentNullException("reader"); } if (reader.Token == JsonToken.Null) { return(null); } var value = new Matrix4x4(); reader.ReadObjectBegin(); while (reader.Token != JsonToken.EndOfObject) { var memberName = reader.ReadMember(); switch (memberName) { case "m00": value.m00 = reader.ReadSingle(); break; case "m10": value.m10 = reader.ReadSingle(); break; case "m20": value.m20 = reader.ReadSingle(); break; case "m30": value.m30 = reader.ReadSingle(); break; case "m01": value.m01 = reader.ReadSingle(); break; case "m11": value.m11 = reader.ReadSingle(); break; case "m21": value.m21 = reader.ReadSingle(); break; case "m31": value.m31 = reader.ReadSingle(); break; case "m02": value.m02 = reader.ReadSingle(); break; case "m12": value.m12 = reader.ReadSingle(); break; case "m22": value.m22 = reader.ReadSingle(); break; case "m32": value.m32 = reader.ReadSingle(); break; case "m03": value.m03 = reader.ReadSingle(); break; case "m13": value.m13 = reader.ReadSingle(); break; case "m23": value.m23 = reader.ReadSingle(); break; case "m33": value.m33 = reader.ReadSingle(); break; default: reader.ReadValue(typeof(object)); break; } } reader.ReadObjectEnd(nextToken: false); return(value); }
public override object Deserialize(IJsonReader reader) { if (reader == null) { throw new ArgumentNullException("reader"); } if (reader.Token == JsonToken.Null) { return(null); } var value = new Vector3(); reader.ReadObjectBegin(); while (reader.Token != JsonToken.EndOfObject) { var memberName = reader.ReadMember(); switch (memberName) { case "x": value.x = reader.ReadSingle(); break; case "y": value.y = reader.ReadSingle(); break; case "z": value.z = reader.ReadSingle(); break; default: reader.ReadValue(typeof(object)); break; } } reader.ReadObjectEnd(nextToken: false); return(value); }
public override object Deserialize(IJsonReader reader) { if (reader == null) { throw new ArgumentNullException("reader"); } if (reader.Token == JsonToken.Null) { return(null); } var value = new Bounds(); reader.ReadObjectBegin(); while (reader.Token != JsonToken.EndOfObject) { var memberName = reader.ReadMember(); if (memberName == "center") { value.center = (Vector3)reader.ReadValue(typeof(Vector3)); } else if (memberName == "extents") { value.extents = (Vector3)reader.ReadValue(typeof(Vector3)); } else { reader.ReadValue(typeof(object)); } } reader.ReadObjectEnd(advance: false); return(value); }
public override object Deserialize(IJsonReader reader) { if (reader == null) { throw new ArgumentNullException("reader"); } var entry = new DictionaryEntry(); reader.ReadObjectBegin(); while (reader.Token != JsonToken.EndOfObject) { var memberName = reader.ReadMember(); if (memberName == "Key") { entry.Key = reader.ReadValue(typeof(object)); } else if (memberName == "Value") { entry.Value = reader.ReadValue(typeof(object)); } else { reader.ReadValue(typeof(object)); } } reader.ReadObjectEnd(advance: false); return(entry); }
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); } }
public override object Deserialize(IJsonReader reader) { if (reader == null) { throw new ArgumentNullException("reader"); } if (reader.Token == JsonToken.Null) { return(null); } var value = new Quaternion(); reader.ReadObjectBegin(); while (reader.Token != JsonToken.EndOfObject) { var memberName = reader.ReadMember(); if (memberName == "x") { value.x = reader.ReadSingle(); } else if (memberName == "y") { value.y = reader.ReadSingle(); } else if (memberName == "z") { value.z = reader.ReadSingle(); } else if (memberName == "w") { value.w = reader.ReadSingle(); } else { reader.ReadValue(typeof(object)); } } reader.ReadObjectEnd(advance: false); return(value); }
public override object Deserialize(IJsonReader reader) { if (reader.RawValue is MessagePackTimestamp) { return((MessagePackTimestamp)reader.Value.Raw); } else if (reader.Token == JsonToken.Null) { return(null); } reader.ReadObjectBegin(); var seconds = default(long); var nanoSeconds = default(uint); while (reader.Token != JsonToken.EndOfObject) { var member = reader.ReadMember(); switch (member) { case SECONDS_MEMBER_NAME: seconds = reader.ReadInt64(); break; case NANO_SECONDS_MEMBER_NAME: seconds = reader.ReadUInt32(); break; default: reader.ReadValue(typeof(object)); // skip value break; } } reader.ReadObjectEnd(false); var value = new MessagePackTimestamp(seconds, nanoSeconds); return(value); }
public override object Deserialize(IJsonReader reader) { if (reader.Token == JsonToken.Null) { return(null); } else if (reader.RawValue is MessagePackExtensionType) { return((MessagePackExtensionType)reader.RawValue); } else if (reader.RawValue is byte[]) { return(new MessagePackExtensionType((byte[])reader.RawValue)); } else if (reader.RawValue is string) { return(new MessagePackExtensionType(Convert.FromBase64String(reader.Value.AsString))); } // { "$binary" : "<bindata>", "$type" : "<t>" } // http://www.mongodb.org/display/DOCS/Mongo+Extended+JSON reader.ReadObjectBegin(); var base64Binary = default(string); var subtypeHex = default(string); while (reader.Token != JsonToken.EndOfObject) { var member = reader.ReadMember(); switch (member) { case DATA_MEMBER_NAME: base64Binary = reader.ReadString(); break; case TYPE_MEMBER_NAME: subtypeHex = reader.ReadString(); break; default: reader.ReadValue(typeof(object)); // skip value break; } } reader.ReadObjectEnd(nextToken: false); if (subtypeHex == null) { subtypeHex = "0"; } if (base64Binary == null) { base64Binary = ""; } var binaryType = unchecked ((sbyte)byte.Parse(subtypeHex, NumberStyles.HexNumber)); var binary = Convert.FromBase64String(base64Binary); var value = new MessagePackExtensionType(binaryType, binary); return(value); }
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(); } }