public override void Serialize(IJsonWriter writer, object value)
        {
            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }
            if (value == null)
            {
                throw new ArgumentNullException("value");
            }

            // serialize generic dictionary
            if (!(value is IDictionary))
            {
                throw new TypeContractViolation(this.GetType(), "be dictionary");
            }

            writer.Context.Hierarchy.Push(value);
            // object
            if (isStringKeyType)
            {
                writer.WriteObjectBegin((value as IDictionary).Count);
                foreach (DictionaryEntry pair in (value as IDictionary))
                {
                    var keyStr = default(string);
                    if (pair.Key is float)
                    {
                        keyStr = ((float)pair.Key).ToString("R", writer.Context.Format);
                    }
                    else if (pair.Key is double)
                    {
                        keyStr = ((double)pair.Key).ToString("R", writer.Context.Format);
                    }
                    else
                    {
                        keyStr = Convert.ToString(pair.Key, writer.Context.Format);
                    }

                    // key
                    writer.WriteMember(keyStr);
                    // value
                    writer.WriteValue(pair.Value, valueType);
                }
                writer.WriteObjectEnd();
            }
            else
            {
                writer.WriteArrayBegin((value as IDictionary).Count);
                foreach (DictionaryEntry pair in (value as IDictionary))
                {
                    writer.WriteArrayBegin(2);
                    writer.WriteValue(pair.Key, keyType);
                    writer.WriteValue(pair.Value, valueType);
                    writer.WriteArrayEnd();
                }
                writer.WriteArrayEnd();
            }

            writer.Context.Hierarchy.Pop();
        }
Ejemplo n.º 2
0
        public override void Serialize(IJsonWriter writer, object value)
        {
            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }
            if (value == null)
            {
                throw new ArgumentNullException("value");
            }

            var size = 0;

            if (value is ICollection)
            {
                size = ((ICollection)value).Count;
            }
            else
            {
                size = ((IEnumerable)value).Cast <object>().Count();
            }

            writer.WriteArrayBegin(size);
            foreach (var item in (IEnumerable)value)
            {
                writer.WriteValue(item, this.elementType);
            }
            writer.WriteArrayEnd();
        }
        public override void Serialize(IJsonWriter writer, object value)
        {
            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }
            if (value == null)
            {
                throw new ArgumentNullException("value");
            }

            var dictionary = (IDictionary)value;

            // ReSharper disable PossibleMultipleEnumeration
            writer.Context.Hierarchy.Push(value);
            // object
            if (this.isStringKeyType)
            {
                writer.WriteObjectBegin(dictionary.Count);
                foreach (DictionaryEntry pair in dictionary)
                {
                    var keyStr = Convert.ToString(pair.Key, writer.Context.Format);
                    // key
                    writer.WriteMember(keyStr);
                    // value
                    writer.WriteValue(pair.Value, this.valueType);
                }
                writer.WriteObjectEnd();
            }
            else
            {
                writer.WriteArrayBegin(dictionary.Count);
                foreach (DictionaryEntry pair in dictionary)
                {
                    writer.WriteArrayBegin(2);
                    writer.WriteValue(pair.Key, this.keyType);
                    writer.WriteValue(pair.Value, this.valueType);
                    writer.WriteArrayEnd();
                }
                writer.WriteArrayEnd();
            }
            // ReSharper restore PossibleMultipleEnumeration

            writer.Context.Hierarchy.Pop();
        }
        public override void Serialize(IJsonWriter writer, object value)
        {
            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }
            if (value == null)
            {
                throw new ArgumentNullException("value");
            }

            var vector2 = (Vector2)value;

            writer.WriteArrayBegin(2);
            writer.Write(vector2.x);
            writer.Write(vector2.y);
            writer.WriteArrayEnd();
        }