Beispiel #1
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }
Beispiel #8
0
        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();
            }
        }