public static void JsonResponse(HttpResponse response, Action<JsonWriter> writeAction) { response.ClearHeaders(); response.ClearContent(); JsonWriter writer = new JsonWriter(response.Output); writeAction(writer); writer.Flush(); }
protected abstract void WriteResult(JsonWriter writer);
private void SerializeDictionary(JsonWriter writer, IDictionary values) { writer.WriteStartObject(); foreach (DictionaryEntry entry in values) { writer.WritePropertyName(entry.Key.ToString()); SerializeValue(writer, entry.Value); } writer.WriteEndObject(); }
public virtual void WriteJson(JsonWriter writer, object value) { JsonSerializer serializer = new JsonSerializer(); serializer.Serialize(writer, value); }
private void SerializeCollection(JsonWriter writer, ICollection values) { object[] collectionValues = new object[values.Count]; values.CopyTo(collectionValues, 0); SerializeList(writer, collectionValues); }
private void SerializeList(JsonWriter writer, IList values) { writer.WriteStartArray(); for (int i = 0; i < values.Count; i++) { SerializeValue(writer, values[i]); } writer.WriteEndArray(); }
private void SerializeObject(JsonWriter writer, object value) { Type objectType = value.GetType(); TypeConverter converter = TypeDescriptor.GetConverter(objectType); // use the objectType's TypeConverter if it has one and can convert to a string if (converter != null && !(converter is ComponentConverter) && converter.GetType() != typeof(TypeConverter)) { if (converter.CanConvertTo(typeof(string))) { writer.WriteValue(converter.ConvertToInvariantString(value)); return; } } writer.SerializeStack.Add(value); writer.WriteStartObject(); if (_serializeFullObject) { List<MemberInfo> members = ReflectionUtils.GetFieldsAndProperties(objectType, BindingFlags.Public | BindingFlags.Instance); foreach (MemberInfo member in members) { if (ReflectionUtils.CanReadMemberValue(member) && !member.IsDefined(typeof(JsonIgnoreAttribute), true)) WriteMemberInfoProperty(writer, value, member); } } else { List<PropertyInfo> members = ReflectionUtils.GetProperties(objectType, BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly); foreach (PropertyInfo member in members) { if (ReflectionUtils.CanReadMemberValue(member) && !member.IsDefined(typeof(System.Xml.Serialization.XmlIgnoreAttribute), true)) WritePropertyInfo(writer, value, member); } } writer.WriteEndObject(); writer.SerializeStack.Remove(value); }
private void WritePropertyInfo(JsonWriter writer, object value, PropertyInfo member) { if (!ReflectionUtils.IsIndexedProperty(member)) { object memberValue = ((PropertyInfo)member).GetValue(value, null); if (writer.SerializeStack.IndexOf(memberValue) != -1) { switch (_referenceLoopHandling) { case ReferenceLoopHandling.Error: throw new Exception("Self referencing loop"); case ReferenceLoopHandling.Ignore: // return from method return; case ReferenceLoopHandling.Serialize: // continue break; default: throw new InvalidOperationException(string.Format("Unexpected ReferenceLoopHandling value: '{0}'", _referenceLoopHandling)); } } writer.WritePropertyName(member.Name); SerializeValue(writer, memberValue); } }
private void SerializeValue(JsonWriter writer, object value) { JsonConverter converter; if (value == null) { writer.WriteNull(); } else if (HasMatchingConverter(value.GetType(), out converter)) { converter.WriteJson(writer, value); } else if (value is IConvertible) { IConvertible convertible = value as IConvertible; switch (convertible.GetTypeCode()) { case TypeCode.String: writer.WriteValue((string)convertible); break; case TypeCode.Char: writer.WriteValue((char)convertible); break; case TypeCode.Boolean: writer.WriteValue((bool)convertible); break; case TypeCode.SByte: writer.WriteValue((sbyte)convertible); break; case TypeCode.Int16: writer.WriteValue((short)convertible); break; case TypeCode.UInt16: writer.WriteValue((ushort)convertible); break; case TypeCode.Int32: writer.WriteValue((int)convertible); break; case TypeCode.Byte: writer.WriteValue((byte)convertible); break; case TypeCode.UInt32: writer.WriteValue((uint)convertible); break; case TypeCode.Int64: writer.WriteValue((long)convertible); break; case TypeCode.UInt64: writer.WriteValue((ulong)convertible); break; case TypeCode.Single: writer.WriteValue((float)convertible); break; case TypeCode.Double: writer.WriteValue((double)convertible); break; case TypeCode.DateTime: //if (_serializeFullObject) //writer.WriteValue((DateTime)convertible); //else writer.WriteValue(((DateTime)convertible).ToString("s")); break; case TypeCode.Decimal: writer.WriteValue((decimal)convertible); break; default: SerializeObject(writer, value); break; } } else if (value is IList) { if (_serializeFullObject) { SerializeList(writer, (IList)value); } else { writer.SerializeStack.Add(value); writer.WriteStartObject(); Type instanceType = value.GetType().UnderlyingSystemType.DeclaringType; if (value.GetType().UnderlyingSystemType.DeclaringType != typeof(IList)) { List<PropertyInfo> members = ReflectionUtils.GetProperties(value.GetType(), BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly); if (members.Count > 0) { foreach (PropertyInfo member in members) { if (member.CanRead && !member.IsDefined(typeof(System.Xml.Serialization.XmlIgnoreAttribute), true)) { WritePropertyInfo(writer, value, member); } } } } if (!(value is ArrayList)) { writer.WritePropertyName("List"); } SerializeList(writer, (IList)value); writer.WriteEndObject(); writer.SerializeStack.Remove(value); } } else if (value is IDictionary) { SerializeDictionary(writer, (IDictionary)value); } else if (value is ICollection) { SerializeCollection(writer, (ICollection)value); } else if (value is Identifier) { writer.WriteRaw(value.ToString()); } else { //Type valueType = value.GetType(); SerializeObject(writer, value); } writer.Flush(); }
/// <summary> /// Serializes the specified <see cref="Object"/> and writes the Json structure /// to a <c>Stream</c> using the specified <see cref="JsonWriter"/>. /// </summary> /// <param name="jsonWriter">The <see cref="JsonWriter"/> used to write the Json structure.</param> /// <param name="value">The <see cref="Object"/> to serialize.</param> public void Serialize(JsonWriter jsonWriter, object value) { _serializeFullObject = true; if (jsonWriter == null) throw new ArgumentNullException("jsonWriter"); if (value == null) throw new ArgumentNullException("value"); SerializeValue(jsonWriter, value); }
public static string Serialize(object value, bool serializeFull) { if (value == null) { return String.Empty; } _serializeFullObject = serializeFull; using (System.IO.StringWriter sw = new System.IO.StringWriter()) { using (JsonWriter jsonWriter = new JsonWriter(sw)) { _singleInstance.SerializeValue(jsonWriter, value); } return sw.ToString(); } }