예제 #1
0
        private void SerializeValue(JsonWriter writer, object value, JsonConverter memberConverter)
        {
            JsonConverter converter;

            if (value == null)
            {
                writer.WriteNull();
            }
            else if (memberConverter != null)
            {
                memberConverter.WriteJson(writer, value);
            }
            else if (HasClassConverter(value.GetType(), out converter))
            {
                converter.WriteJson(writer, value);
            }
            else if (HasMatchingConverter(value.GetType(), out converter))
            {
                converter.WriteJson(writer, value);
            }
            else if (JsonConvert.IsJsonPrimitive(value))
            {
                writer.WriteValue(value);
            }
            else if (value is IList)
            {
                SerializeList(writer, (IList)value);
            }
            else if (value is IDictionary)
            {
                SerializeDictionary(writer, (IDictionary)value);
            }
            else if (value is ICollection)
            {
                SerializeCollection(writer, (ICollection)value);
            }
            else if (value is IEnumerable)
            {
                SerializeEnumerable(writer, (IEnumerable)value);
            }
            else if (value is JsonRaw)
            {
                writer.WriteRawValue(((JsonRaw)value).Content);
            }
            else
            {
                SerializeObject(writer, value);
            }
        }