コード例 #1
0
        /// <summary>
        /// Writes the JSON representation of the object.
        /// </summary>
        /// <param name="writer">The <see cref="JsonWriter"/> to write to.</param>
        /// <param name="value">The value.</param>
        /// <param name="serializer">The calling serializer.</param>
        public override void WriteJson(JsonWriter writer, object value, JsonSerializerWriter internalWriter)
        {
            if (value == null)
            {
                writer.WriteNull();
                return;
            }

            Enum e = (Enum)value;

            string enumName = e.ToString("G");

            if (char.IsNumber(enumName[0]) || enumName[0] == '-')
            {
                // enum value has no name so write number
                writer.WriteValue(value);
            }
            else
            {
                Type enumType = e.GetType();

                string finalName = EnumUtils.ToEnumName(enumType, enumName, CamelCaseText);

                writer.WriteValue(finalName);
            }
        }
        /// <summary>
        /// Writes the JSON representation of the object.
        /// </summary>
        /// <param name="writer">The <see cref="JsonWriter"/> to write to.</param>
        /// <param name="value">The value.</param>
        /// <param name="serializer">The calling serializer.</param>
        public override void WriteJson(JsonWriter writer, object value, JsonSerializerWriter internalWriter)
        {
            long ticks;

            if (value is DateTime)
            {
                DateTime dateTime    = (DateTime)value;
                DateTime utcDateTime = dateTime.ToUniversalTime();
                ticks = DateTimeUtils.ConvertDateTimeToJavaScriptTicks(utcDateTime);
            }
#if !NET20
            else if (value is DateTimeOffset)
            {
                DateTimeOffset dateTimeOffset    = (DateTimeOffset)value;
                DateTimeOffset utcDateTimeOffset = dateTimeOffset.ToUniversalTime();
                ticks = DateTimeUtils.ConvertDateTimeToJavaScriptTicks(utcDateTimeOffset.UtcDateTime);
            }
#endif
            else
            {
                throw new JsonSerializationException("Expected date object value.");
            }

            writer.WriteStartConstructor("Date");
            writer.WriteValue(ticks);
            writer.WriteEndConstructor();
        }
コード例 #3
0
        /// <summary>
        /// Writes the JSON representation of the object.
        /// </summary>
        /// <param name="writer">The <see cref="JsonWriter"/> to write to.</param>
        /// <param name="value">The value.</param>
        /// <param name="serializer">The calling serializer.</param>
        public override void WriteJson(JsonWriter writer, object value, JsonSerializerWriter internalWriter)
        {
            DefaultContractResolver resolver = internalWriter.Serializer.ContractResolver as DefaultContractResolver;

            Type  unionType = UnionTypeLookupCache.Get(value.GetType());
            Union union     = UnionCache.Get(unionType);

            int       tag      = (int)union.TagReader.Invoke(value);
            UnionCase caseInfo = union.Cases.Single(c => c.Tag == tag);

            writer.WriteStartObject();
            writer.WritePropertyName((resolver != null) ? resolver.GetResolvedPropertyName(CasePropertyName) : CasePropertyName);
            writer.WriteValue(caseInfo.Name);
            if (caseInfo.Fields != null && caseInfo.Fields.Length > 0)
            {
                object[] fields = (object[])caseInfo.FieldReader.Invoke(value);

                writer.WritePropertyName((resolver != null) ? resolver.GetResolvedPropertyName(FieldsPropertyName) : FieldsPropertyName);
                writer.WriteStartArray();
                foreach (object field in fields)
                {
                    internalWriter.Serialize(writer, field, field.GetType());
                }
                writer.WriteEndArray();
            }
            writer.WriteEndObject();
        }
コード例 #4
0
        public JsonSerializerProxy(JsonSerializerWriter serializerWriter)
        {
            ValidationUtils.ArgumentNotNull(serializerWriter, nameof(serializerWriter));

            _serializerWriter = serializerWriter;
            _serializer       = serializerWriter.Serializer;
        }
コード例 #5
0
        internal virtual void SerializeInternal(JsonWriter jsonWriter, object value)
        {
            ValidationUtils.ArgumentNotNull(jsonWriter, "jsonWriter");

            JsonSerializerWriter serializerWriter = new JsonSerializerWriter(this);

            serializerWriter.Serialize(jsonWriter, value);
        }
コード例 #6
0
        /// <summary>
        /// Writes the JSON representation of the object.
        /// </summary>
        /// <param name="writer">The <see cref="JsonWriter"/> to write to.</param>
        /// <param name="value">The value.</param>
        /// <param name="serializer">The calling serializer.</param>
        public override void WriteJson(JsonWriter writer, object value, JsonSerializerWriter internalWriter)
        {
            if (value == null)
            {
                writer.WriteNull();
                return;
            }

            byte[] data = GetByteArray(value);

            writer.WriteValue(data);
        }
コード例 #7
0
        /// <summary>
        /// Writes the JSON representation of the object.
        /// </summary>
        /// <param name="writer">The <see cref="JsonWriter"/> to write to.</param>
        /// <param name="value">The value.</param>
        /// <param name="serializer">The calling serializer.</param>
        public override void WriteJson(JsonWriter writer, object value, JsonSerializerWriter internalWriter)
        {
            ReflectionObject reflectionObject = ReflectionObjectPerType.Get(value.GetType());

            DefaultContractResolver resolver = internalWriter.Serializer.ContractResolver as DefaultContractResolver;

            writer.WriteStartObject();
            writer.WritePropertyName((resolver != null) ? resolver.GetResolvedPropertyName(KeyName) : KeyName);
            internalWriter.Serialize(writer, reflectionObject.GetValue(value, KeyName), reflectionObject.GetType(KeyName));
            writer.WritePropertyName((resolver != null) ? resolver.GetResolvedPropertyName(ValueName) : ValueName);
            internalWriter.Serialize(writer, reflectionObject.GetValue(value, ValueName), reflectionObject.GetType(ValueName));
            writer.WriteEndObject();
        }
コード例 #8
0
        public override void WriteJson(JsonWriter writer, object value, JsonSerializerWriter internalWriter)
        {
            var res = (Resolution)value;

            writer.WriteStartObject();
            writer.WritePropertyName("height");
            writer.WriteValue(res.height);
            writer.WritePropertyName("width");
            writer.WriteValue(res.width);
            writer.WritePropertyName("refreshRate");
            writer.WriteValue(res.refreshRate);
            writer.WriteEndObject();
        }
コード例 #9
0
        /// <summary>
        /// Writes the JSON representation of the object.
        /// </summary>
        /// <param name="writer">The <see cref="JsonWriter"/> to write to.</param>
        /// <param name="value">The value.</param>
        /// <param name="serializer">The calling serializer.</param>
        public override void WriteJson(JsonWriter writer, object value, JsonSerializerWriter internalWriter)
        {
            Regex regex = (Regex)value;

            BsonWriter bsonWriter = writer as BsonWriter;

            if (bsonWriter != null)
            {
                WriteBson(bsonWriter, regex);
            }
            else
            {
                WriteJson(writer, regex, internalWriter);
            }
        }
コード例 #10
0
 /// <summary>
 /// Writes the JSON representation of the object.
 /// </summary>
 /// <param name="writer">The <see cref="JsonWriter"/> to write to.</param>
 /// <param name="value">The value.</param>
 /// <param name="serializer">The calling serializer.</param>
 public override void WriteJson(JsonWriter writer, object value, JsonSerializerWriter internalWriter)
 {
     if (value == null)
     {
         writer.WriteNull();
     }
     else if (value is Version)
     {
         writer.WriteValue(value.ToString());
     }
     else
     {
         throw new JsonSerializationException("Expected Version object value");
     }
 }
        /// <summary>
        /// Writes the JSON representation of the object.
        /// </summary>
        /// <param name="writer">The <see cref="JsonWriter"/> to write to.</param>
        /// <param name="value">The value.</param>
        /// <param name="serializer">The calling serializer.</param>
        public override void WriteJson(JsonWriter writer, object value, JsonSerializerWriter internalWriter)
        {
            BsonObjectId objectId = (BsonObjectId)value;

            BsonWriter bsonWriter = writer as BsonWriter;

            if (bsonWriter != null)
            {
                bsonWriter.WriteObjectId(objectId.Value);
            }
            else
            {
                writer.WriteValue(objectId.Value);
            }
        }
コード例 #12
0
        public override void WriteJson(JsonWriter writer, object value, JsonSerializerWriter internalWriter)
        {
            if (null == value)
            {
                writer.WriteNull();
                return;
            }

            var uri = value as Uri;

            if (uri == null)
            {
                throw new InvalidOperationException(
                          "Unhandled case for UriConverter. Check to see if this converter has been applied to the wrong serialization type.");
            }

            writer.WriteValue(uri.OriginalString);
            return;
        }
        /// <summary>
        /// Writes the JSON representation of the object.
        /// </summary>
        /// <param name="writer">The <see cref="JsonWriter"/> to write to.</param>
        /// <param name="value">The value.</param>
        /// <param name="serializer">The calling serializer.</param>
        public override void WriteJson(JsonWriter writer, object value, JsonSerializerWriter internalWriter)
        {
            EnsureReflectionObject(value.GetType());

            DefaultContractResolver resolver = internalWriter.Serializer.ContractResolver as DefaultContractResolver;

            string keyName  = (string)_reflectionObject.GetValue(value, KeyPropertyName);
            object keyValue = _reflectionObject.GetValue(value, ValuePropertyName);

            Type keyValueType = (keyValue != null) ? keyValue.GetType() : null;

            writer.WriteStartObject();
            writer.WritePropertyName((resolver != null) ? resolver.GetResolvedPropertyName(KeyPropertyName) : KeyPropertyName);
            writer.WriteValue(keyName);
            writer.WritePropertyName((resolver != null) ? resolver.GetResolvedPropertyName(TypePropertyName) : TypePropertyName);
            writer.WriteValue((keyValueType != null) ? keyValueType.FullName : null);

            writer.WritePropertyName((resolver != null) ? resolver.GetResolvedPropertyName(ValuePropertyName) : ValuePropertyName);

            if (keyValueType != null)
            {
                string valueJson;
                if (JsonSerializerWriter.TryConvertToString(keyValue, keyValueType, out valueJson))
                {
                    writer.WriteValue(valueJson);
                }
                else
                {
                    writer.WriteValue(keyValue);
                }
            }
            else
            {
                writer.WriteNull();
            }

            writer.WriteEndObject();
        }
コード例 #14
0
        /// <summary>
        /// Writes the JSON representation of the object.
        /// </summary>
        /// <param name="writer">The <see cref="JsonWriter"/> to write to.</param>
        /// <param name="value">The value.</param>
        /// <param name="serializer">The calling serializer.</param>
        public override void WriteJson(JsonWriter writer, object value, JsonSerializerWriter internalWriter)
        {
            string text;

            if (value is DateTime)
            {
                DateTime dateTime = (DateTime)value;

                if ((_dateTimeStyles & DateTimeStyles.AdjustToUniversal) == DateTimeStyles.AdjustToUniversal ||
                    (_dateTimeStyles & DateTimeStyles.AssumeUniversal) == DateTimeStyles.AssumeUniversal)
                {
                    dateTime = dateTime.ToUniversalTime();
                }

                text = dateTime.ToString(_dateTimeFormat ?? DefaultDateTimeFormat, Culture);
            }
#if !NET20
            else if (value is DateTimeOffset)
            {
                DateTimeOffset dateTimeOffset = (DateTimeOffset)value;
                if ((_dateTimeStyles & DateTimeStyles.AdjustToUniversal) == DateTimeStyles.AdjustToUniversal ||
                    (_dateTimeStyles & DateTimeStyles.AssumeUniversal) == DateTimeStyles.AssumeUniversal)
                {
                    dateTimeOffset = dateTimeOffset.ToUniversalTime();
                }

                text = dateTimeOffset.ToString(_dateTimeFormat ?? DefaultDateTimeFormat, Culture);
            }
#endif
            else
            {
                throw new JsonSerializationException("Unexpected value when converting date. Expected DateTime or DateTimeOffset, got {0}.".FormatWith(CultureInfo.InvariantCulture, ReflectionUtils.GetObjectType(value)));
            }

            writer.WriteValue(text);
        }
コード例 #15
0
        public override void WriteProperties(JsonObjectContract contract, JsonWriter writer, object value, Type objectType, JsonSerializerWriter internalWriter)
        {
            if (objectType == typeof(Rect))
            {
                var rect = (Rect)value;
                internalWriter.SerializeProperty(writer, "position", rect.position);
                internalWriter.SerializeProperty(writer, "size", rect.size);
            }
#if UNITY_2017_2_OR_NEWER
            else if (objectType == typeof(Vector2Int))
            {
                var rect = (RectInt)value;
                internalWriter.SerializeProperty(writer, "position", rect.position);
                internalWriter.SerializeProperty(writer, "size", rect.size);
            }
#endif
        }
コード例 #16
0
 public override void WriteProperties(JsonObjectContract contract, JsonWriter writer, object value, Type objectType, JsonSerializerWriter internalWriter)
 {
     //var instance = (UnityEngine.Renderer)value;
     //WriteObjectProperties(writer, instance, internalWriter);
     internalWriter.SerializeObjectProperties(writer, value, contract, null, null, null, this.propertiesToIgnore.ToArray());
 }
コード例 #17
0
        public override void WriteProperties(JsonObjectContract contract, JsonWriter writer, object value, Type objectType, JsonSerializerWriter internalWriter)
        {
            Shader shader = (Shader)value;

            writer.WriteProperty("name", shader.name);
            writer.WriteProperty("maximumLOD", shader.maximumLOD);
        }
コード例 #18
0
 public override void WriteJson(JsonWriter writer, object value, JsonSerializerWriter internalWriter)
 {
     //throw new NotImplementedException();
 }
コード例 #19
0
 public virtual void WriteObjectProperties(JsonWriter writer, Renderer instance, JsonSerializerWriter internalWriter)
 {
     internalWriter.SerializeProperty(writer, "sharedMaterials", instance.sharedMaterials);
 }
コード例 #20
0
        public override void WriteProperties(JsonObjectContract contract, JsonWriter writer, object value, Type objectType, JsonSerializerWriter internalWriter)
        {
            Color color = (Color)value;

            writer.WritePropertyName("a");
            writer.WriteValue(color.a);
            writer.WritePropertyName("r");
            writer.WriteValue(color.r);
            writer.WritePropertyName("g");
            writer.WriteValue(color.g);
            writer.WritePropertyName("b");
            writer.WriteValue(color.b);
        }
コード例 #21
0
        /// <summary>
        /// Writes this token to a <see cref="JsonWriter"/>.
        /// </summary>
        /// <param name="writer">A <see cref="JsonWriter"/> into which this method will write.</param>
        /// <param name="converters">A collection of <see cref="JsonConverter"/> which will be used when writing the token.</param>
        public override void WriteTo(JsonWriter writer, params JsonConverter[] converters)
        {
            if (converters != null && converters.Length > 0 && _value != null)
            {
                JsonConverter matchingConverter = JsonSerializer.GetMatchingConverter(converters, _value.GetType());
                if (matchingConverter != null && matchingConverter.CanWrite)
                {
                    JsonSerializerWriter internalWriter = new JsonSerializerWriter(JsonSerializer.CreateDefault());
                    matchingConverter.WriteJson(writer, _value, internalWriter);
                    return;
                }
            }

            switch (_valueType)
            {
            case JTokenType.Comment:
                writer.WriteComment((_value != null) ? _value.ToString() : null);
                return;

            case JTokenType.Raw:
                writer.WriteRawValue((_value != null) ? _value.ToString() : null);
                return;

            case JTokenType.Null:
                writer.WriteNull();
                return;

            case JTokenType.Undefined:
                writer.WriteUndefined();
                return;

            case JTokenType.Integer:
                if (_value is int)
                {
                    writer.WriteValue((int)_value);
                }
                else if (_value is long)
                {
                    writer.WriteValue((long)_value);
                }
                else if (_value is ulong)
                {
                    writer.WriteValue((ulong)_value);
                }
#if !(NET20 || NET35 || PORTABLE40 || (UNITY_WSA || UNITY_WINRT))
                else if (_value is BigInteger)
                {
                    writer.WriteValue((BigInteger)_value);
                }
#endif
                else
                {
                    writer.WriteValue(Convert.ToInt64(_value, CultureInfo.InvariantCulture));
                }
                return;

            case JTokenType.Float:
                if (_value is decimal)
                {
                    writer.WriteValue((decimal)_value);
                }
                else if (_value is double)
                {
                    writer.WriteValue((double)_value);
                }
                else if (_value is float)
                {
                    writer.WriteValue((float)_value);
                }
                else
                {
                    writer.WriteValue(Convert.ToDouble(_value, CultureInfo.InvariantCulture));
                }
                return;

            case JTokenType.String:
                writer.WriteValue((_value != null) ? _value.ToString() : null);
                return;

            case JTokenType.Boolean:
                writer.WriteValue(Convert.ToBoolean(_value, CultureInfo.InvariantCulture));
                return;

            case JTokenType.Date:
#if !NET20
                if (_value is DateTimeOffset)
                {
                    writer.WriteValue((DateTimeOffset)_value);
                }
                else
#endif
                {
                    writer.WriteValue(Convert.ToDateTime(_value, CultureInfo.InvariantCulture));
                }
                return;

            case JTokenType.Bytes:
                writer.WriteValue((byte[])_value);
                return;

            case JTokenType.Guid:
                writer.WriteValue((_value != null) ? (Guid?)_value : null);
                return;

            case JTokenType.TimeSpan:
                writer.WriteValue((_value != null) ? (TimeSpan?)_value : null);
                return;

            case JTokenType.Uri:
                writer.WriteValue((Uri)_value);
                return;
            }

            throw MiscellaneousUtils.CreateArgumentOutOfRangeException("TokenType", _valueType, "Unexpected token type.");
        }
 /// <summary>
 /// Writes the JSON representation of the object.
 /// </summary>
 /// <param name="writer">The <see cref="JsonWriter"/> to write to.</param>
 /// <param name="value">The value.</param>
 /// <param name="serializer">The calling serializer.</param>
 public override void WriteJson(JsonWriter writer, object value, JsonSerializerWriter internalWriter)
 {
     // can write is set to false
 }
コード例 #23
0
        public override void WriteProperties(JsonObjectContract contract, JsonWriter writer, object value, Type objectType, JsonSerializerWriter internalWriter)
        {
            var instance = (UnityEngine.RectTransform)value;

            internalWriter.SerializeProperty(writer, "anchorMin", instance.anchorMin);
            internalWriter.SerializeProperty(writer, "anchorMax", instance.anchorMax);
            internalWriter.SerializeProperty(writer, "anchoredPosition", instance.anchoredPosition);
            internalWriter.SerializeProperty(writer, "sizeDelta", instance.sizeDelta);
            internalWriter.SerializeProperty(writer, "pivot", instance.pivot);
            internalWriter.SerializeProperty(writer, "offsetMin", instance.offsetMin);
            internalWriter.SerializeProperty(writer, "offsetMax", instance.offsetMax);
            internalWriter.SerializeProperty(writer, "position", instance.position);
            internalWriter.SerializeProperty(writer, "rotation", instance.rotation);
            internalWriter.SerializeProperty(writer, "localScale", instance.localScale);
            internalWriter.SerializeProperty(writer, "parent", instance.parent);
            internalWriter.SerializeProperty(writer, "hideFlags", instance.hideFlags);
        }
コード例 #24
0
        public override void WriteProperties(JsonObjectContract contract, JsonWriter writer, object value, Type objectType, JsonSerializerWriter internalWriter)
        {
            Material material = (Material)value;

            internalWriter.SerializeProperty(writer, "shader", material.shader);
            writer.WriteProperty("name", material.name);
            internalWriter.SerializeProperty(writer, "shaderKeywords", material.shaderKeywords);
            writer.WriteProperty("renderQueue", material.renderQueue);
            writer.WriteProperty("globalIlluminationFlags", material.globalIlluminationFlags);
            writer.WriteProperty("doubleSidedGI", material.doubleSidedGI);
            writer.WriteProperty("enableInstancing", material.enableInstancing);
            RuntimeMaterialProperties properties = MaterialPropertiesResolver.Current.GetMaterialProperties(material);

            if (properties != null)
            {
                List <JsonSerializedMaterialProperty> serializableProperties = new List <JsonSerializedMaterialProperty>();
                for (int i = 0; i < properties.Properties.Count; i++)
                {
                    RuntimeMaterialProperty        property           = properties.Properties[i];
                    JsonSerializedMaterialProperty serializedProperty = new JsonSerializedMaterialProperty();
                    serializedProperty.name = property.Name;
                    serializedProperty.type = property.Type;
                    switch (property.Type)
                    {
                    case RuntimeMaterialPropertyType.Color:
                        serializedProperty.value = material.GetColor(property.Name);
                        break;

                    case RuntimeMaterialPropertyType.Vector:
                        serializedProperty.value = material.GetVector(property.Name);
                        break;

                    case RuntimeMaterialPropertyType.Float:
                        serializedProperty.value = material.GetFloat(property.Name);
                        break;

                    case RuntimeMaterialPropertyType.Range:
                        serializedProperty.value = material.GetFloat(property.Name);
                        break;

                    case RuntimeMaterialPropertyType.Texture:
                        serializedProperty.value = material.GetTexture(property.Name);
                        break;
                    }
                    serializableProperties.Add(serializedProperty);
                    //internalWriter.SerializeProperty(writer, MaterialPropertyNamePrefix + property.Name, serializedProperty);
                }
                internalWriter.SerializeProperty(writer, MaterialPropertiesName, serializableProperties);
            }

            // Serialize main properties when there are no pre-defined properties available for this material
            else
            {
                internalWriter.SerializeProperty(writer, "color", material.color);
                internalWriter.SerializeProperty(writer, "mainTexture", material.mainTexture);
                internalWriter.SerializeProperty(writer, "mainTextureOffset", material.mainTextureOffset);
                internalWriter.SerializeProperty(writer, "mainTextureScale", material.mainTextureScale);
            }
        }
コード例 #25
0
 public override void WriteProperties(JsonObjectContract contract, JsonWriter writer, object value, Type objectType, JsonSerializerWriter internalWriter)
 {
     Quaternion quaternion = (Quaternion)value;
     writer.WritePropertyName("x");
     writer.WriteValue(quaternion.x);
     writer.WritePropertyName("y");
     writer.WriteValue(quaternion.y);
     writer.WritePropertyName("z");
     writer.WriteValue(quaternion.z);
     writer.WritePropertyName("w");
     writer.WriteValue(quaternion.w);
 }
コード例 #26
0
        public override void WriteProperties(JsonObjectContract contract, JsonWriter writer, object value, Type objectType, JsonSerializerWriter internalWriter)
        {
            if (objectType == typeof(Vector2))
            {
                var vector = (Vector2)value;
                WriteVector(writer, vector.x, vector.y, null, null);
            }
            else if (objectType == typeof(Vector3))
            {
                var vector = (Vector3)value;
                WriteVector(writer, vector.x, vector.y, vector.z, null);
            }
            else if (objectType == typeof(Vector4))
            {
                var vector = (Vector4)value;
                WriteVector(writer, vector.x, vector.y, vector.z, vector.w);
            }
#if UNITY_2017_2_OR_NEWER
            else if (objectType == typeof(Vector2Int))
            {
                var vector = (Vector2Int)value;
                WriteVector(writer, vector.x, vector.y, null, null);
            }
            else if (objectType == typeof(Vector3Int))
            {
                var vector = (Vector3Int)value;
                WriteVector(writer, vector.x, vector.y, vector.z, null);
            }
#endif
        }
コード例 #27
0
        public override void WriteProperties(JsonObjectContract contract, JsonWriter writer, object value, Type objectType, JsonSerializerWriter internalWriter)
        {
            var instance = (UnityEngine.Mesh)value;

#if UNITY_2017_3
            internalWriter.SerializeProperty(writer, "indexFormat", instance.indexFormat);
#endif
            internalWriter.SerializeProperty(writer, "bindposes", instance.bindposes);
            writer.WriteProperty("subMeshCount", instance.subMeshCount);
            internalWriter.SerializeProperty(writer, "bounds", instance.bounds);
            internalWriter.SerializeProperty(writer, "vertices", instance.vertices);
            internalWriter.SerializeProperty(writer, "normals", instance.normals);
            internalWriter.SerializeProperty(writer, "tangents", instance.tangents);
            internalWriter.SerializeProperty(writer, "uv", instance.uv);
            internalWriter.SerializeProperty(writer, "uv2", instance.uv2);
            internalWriter.SerializeProperty(writer, "uv3", instance.uv3);
            internalWriter.SerializeProperty(writer, "uv4", instance.uv4);
            internalWriter.SerializeProperty(writer, "colors", instance.colors);
            internalWriter.SerializeProperty(writer, "colors32", instance.colors32);

            writer.WritePropertyName("triangles");
            writer.WriteStartArray();
            for (int i = 0; i < instance.subMeshCount; i++)
            {
                internalWriter.Serialize(writer, instance.GetTriangles(i));
            }
            writer.WriteEndArray();

            writer.WritePropertyName("indices");
            writer.WriteStartArray();
            for (int i = 0; i < instance.subMeshCount; i++)
            {
                SerializedIndices serializedIndices = new SerializedIndices();
                serializedIndices.meshTopology = instance.GetTopology(i);
                serializedIndices.indices      = instance.GetIndices(i);
                internalWriter.Serialize(writer, serializedIndices);
            }
            writer.WriteEndArray();

            internalWriter.SerializeProperty(writer, "boneWeights", instance.boneWeights);
            writer.WriteProperty("name", instance.name);
            internalWriter.SerializeProperty(writer, "hideFlags", instance.hideFlags);
        }
コード例 #28
0
        public override void WriteJson(JsonWriter writer, object value, JsonSerializerWriter internalWriter)
        {
            if (value == null || (value is UnityEngine.Object && value as UnityEngine.Object == null))
            {
                writer.WriteNull();
                return;
            }
            Type objectType = value.GetType();

            internalWriter._rootType  = objectType;
            internalWriter._rootLevel = internalWriter._serializeStack.Count + 1;
            JsonObjectContract contract = (JsonObjectContract)internalWriter.GetContractSafe(value);

            try
            {
                if (internalWriter.ShouldWriteReference(value, null, contract, null, null))
                {
                    internalWriter.WriteReference(writer, value);
                }
                else
                {
                    if (value == null)
                    {
                        writer.WriteNull();
                        return;
                    }
                    internalWriter.OnSerializing(writer, contract, value);

                    internalWriter._serializeStack.Add(value);

                    internalWriter.WriteObjectStart(writer, value, contract, null, null, null);

                    WriteProperties(contract, writer, value, objectType, internalWriter);

                    writer.WriteEndObject();

                    internalWriter._serializeStack.RemoveAt(internalWriter._serializeStack.Count - 1);

                    internalWriter.OnSerialized(writer, contract, value);
                }
            }
            catch (Exception ex)
            {
                if (internalWriter.IsErrorHandled(null, contract, null, null, writer.Path, ex))
                {
                    internalWriter.HandleError(writer, 0);
                }
                else
                {
                    // clear context in case serializer is being used inside a converter
                    // if the converter wraps the error then not clearing the context will cause this error:
                    // "Current error context error is different to requested error."
                    internalWriter.ClearErrorContext();
                    throw;
                }
            }
            finally
            {
                // clear root contract to ensure that if level was > 1 then it won't
                // accidently be used for non root values
                internalWriter._rootType = null;
            }
        }
コード例 #29
0
 /// <summary>
 /// Writes the JSON representation of the object.
 /// </summary>
 /// <param name="writer">The <see cref="JsonWriter"/> to write to.</param>
 /// <param name="value">The value.</param>
 /// <param name="serializer">The calling serializer.</param>
 public override void WriteJson(JsonWriter writer, object value, JsonSerializerWriter internalWriter)
 {
     throw new NotSupportedException("CustomCreationConverter should only be used while deserializing.");
 }
コード例 #30
0
 public abstract void WriteProperties(JsonObjectContract contract, JsonWriter writer, object value, Type objectType, JsonSerializerWriter internalWriter);