private static void JsonSerializeList(this JsonWriter writer, IEnumerable list) { foreach (var item in list) { if (null == item) { continue; } writer.Object(); writer.JsonSerializeObject(item); } writer.EndArray(); }
public static string JsonSerialize(this object value, JsonWriterSettings settings) { if (null == value) { return null; } if (null == settings) { throw new ArgumentNullException("settings"); } using (var stream = new MemoryStream()) { using (var writer = new JsonWriter(stream, settings)) { var list = value as IEnumerable; if (value.GetType().IsArray) { writer.Array(); writer.JsonSerializeList(list); } else { writer.Object(); writer.JsonSerializeObject(value); } } using (var reader = new StreamReader(stream)) { return reader.ReadToEnd(); } } }
public static string JsonSerialize(this object value, JsonWriterSettings settings) { if (null == value) { return(null); } if (null == settings) { throw new ArgumentNullException("settings"); } using (var stream = new MemoryStream()) { using (var writer = new JsonWriter(stream, settings)) { var list = value as IEnumerable; if (value.GetType().IsArray) { writer.Array(); writer.JsonSerializeList(list); } else { writer.Object(); writer.JsonSerializeObject(value); } } using (var reader = new StreamReader(stream)) { return(reader.ReadToEnd()); } } }
private static void JsonSerializeObject(this JsonWriter writer, object obj) { if (null == obj) { return; } var properties = obj .GetType() .GetProperties(BindingFlags.Public | BindingFlags.Instance) .ToList(); foreach (var property in properties) { if (!property.CanRead) { continue; } if (0 != property.GetIndexParameters().Length) { continue; } var ignore = property.GetCustomAttributes(typeof(JsonIgnoreAttribute), true); if (0 != ignore.Length) { continue; } var name = property.Name.ToCamelCase(); foreach (JsonNameAttribute attribute in property.GetCustomAttributes(typeof(JsonNameAttribute), true)) { name = attribute.Name; } var value = property.GetValue(obj, null); if (writer.JsonSerializeBaseClassLibraryType(name, value)) { continue; } writer.Object(name); var serializable = value as IJsonSerializable; if (null == serializable) { writer.JsonSerializeObject(value); } else { serializable.WriteJson(writer); writer.EndObject(); } } var list = obj as IEnumerable; if (null != list) { writer.Array(writer.Settings.ItemsName); foreach (var item in list) { if (writer.JsonSerializeBaseClassLibraryType(null, item)) { continue; } writer.Object(); writer.JsonSerializeObject(item); } writer.EndArray(); } writer.EndObject(); }