private void WriteAttributedMember(string itemName, object value, JSonMemberAttribute attr) { if (attr == null || !attr.SkipWhenNull || (attr.SkipWhenNull && value != null)) { WriteMember(attr == null || string.IsNullOrEmpty(attr.Name) ? itemName : attr.Name); WriteEmbeddedValue(value); } }
private void WriteAttributedObject(object o, Type oType, JSonSerializableAttribute jsonAttribute) { if (o == null) { throw new ArgumentNullException("o"); } if (oType == null) { throw new ArgumentNullException("oType"); } if (jsonAttribute == null) { throw new ArgumentNullException("jsonAttribute"); } // get members that will be serialized: #if WINDOWS_STORE IEnumerable <FieldInfo> fieldMembers = ReflectionHelper.GetFields(oType); IEnumerable <PropertyInfo> propertyMembers = ReflectionHelper.GetProperties(oType); #else IEnumerable <FieldInfo> fieldMembers = ReflectionHelper.GetFields(oType, jsonAttribute.Flags); IEnumerable <PropertyInfo> propertyMembers = ReflectionHelper.GetProperties(oType, jsonAttribute.Flags); #endif WriteObjectBegin(); // serialize all fields: foreach (FieldInfo f in fieldMembers) { if (!f.IsLiteral) { JSonMemberAttribute attr = ReflectionHelper.GetCustomAttribute <JSonMemberAttribute>(f); if (attr != null || jsonAttribute.AllowAllFields) { WriteAttributedMember(f.Name, f.GetValue(o), attr); } } } // serialize all properties: foreach (PropertyInfo p in propertyMembers) { // there must be a getter defined: if (p.CanRead) { JSonMemberAttribute attr = ReflectionHelper.GetCustomAttribute <JSonMemberAttribute>(p); if (attr != null || jsonAttribute.AllowAllProperties) { WriteAttributedMember(p.Name, p.GetValue(o, null), attr); } } } WriteObjectEnd(); }