コード例 #1
0
        /// <summary>
        /// This method returns a series of values that will not be serialized for a field or a property. When the value of the member matches those values, it will not be serialized. If all values can be serialized, null should be returned. The value can be set via <see cref="System.ComponentModel.DefaultValueAttribute"/>.
        /// </summary>
        /// <param name="member">The <see cref="MemberInfo"/> of the field or property.</param>
        /// <returns>The values which are not serialized for <paramref name="member"/>.</returns>
        public override IEnumerable GetNonSerializedValues(MemberInfo member)
        {
            var a = AttributeHelper.GetAttribute <System.ComponentModel.DefaultValueAttribute> (member, true);
            var n = AttributeHelper.GetAttributes <JsonNonSerializedValueAttribute> (member, true);

            if (a == null && n.Length == 0)
            {
                return(null);
            }
            var v = new List <object> ();

            if (a != null)
            {
                v.Add(a.Value);
            }
            foreach (var item in n)
            {
                v.Add(item.Value);
            }
            return(v);
        }
コード例 #2
0
        /// <summary>
        /// This method returns possible names for corresponding types of a field or a property. This enables polymorphic serialization and deserialization for abstract classes, interfaces, or object types, with predetermined concrete types. If polymorphic serialization is not used, null or an empty <see cref="SerializedNames"/> could be returned. The names can be set via <see cref="JsonFieldAttribute"/>.
        /// </summary>
        /// <param name="member">The <see cref="MemberInfo"/> of the field or property.</param>
        /// <returns>The dictionary contains types and their corresponding names.</returns>
        /// <exception cref="InvalidCastException">The <see cref="JsonFieldAttribute.DataType"/> type does not derive from the member type.</exception>
        public override SerializedNames GetSerializedNames(MemberInfo member)
        {
            var tn = new SerializedNames();
            var jf = AttributeHelper.GetAttributes <JsonFieldAttribute> (member, true);
            var f  = member as FieldInfo;
            var p  = member as PropertyInfo;
            var t  = p != null ? p.PropertyType : f.FieldType;

            foreach (var item in jf)
            {
                if (String.IsNullOrEmpty(item.Name))
                {
                    continue;
                }
                if (item.DataType == null)
                {
                    tn.DefaultName = item.Name;
                }
                else
                {
                    if (t.IsAssignableFrom(item.DataType) == false)
                    {
                        throw new InvalidCastException("The override type (" + item.DataType.FullName + ") does not derive from the member type (" + t.FullName + ")");
                    }
                    tn.Add(item.DataType, item.Name);
                }
            }
#if NET_40_OR_GREATER
            if (UseDataContractAttributes && jf.Length == 0)
            {
                var m = AttributeHelper.GetAttribute <DataMemberAttribute> (member, true);
                if (m != null && String.IsNullOrEmpty(m.Name) == false)
                {
                    tn.DefaultName = m.Name;
                }
            }
#endif
            if (UseXmlSerializationAttributes)
            {
                var ar = AttributeHelper.GetAttribute <XmlArrayAttribute> (member, true);
                if (ar != null)
                {
                    tn.DefaultName = ar.ElementName;
                }
                foreach (var item in AttributeHelper.GetAttributes <XmlElementAttribute> (member, true))
                {
                    if (String.IsNullOrEmpty(item.ElementName))
                    {
                        continue;
                    }
                    if (item.DataType == null)
                    {
                        tn.DefaultName = item.ElementName;
                    }
                    else
                    {
                        if (t.IsAssignableFrom(item.Type) == false)
                        {
                            throw new InvalidCastException("The override type (" + item.Type.FullName + ") does not derive from the member type (" + t.FullName + ")");
                        }
                        tn.Add(item.Type, item.ElementName);
                    }
                }
                var an = AttributeHelper.GetAttribute <XmlAttributeAttribute> (member, true);
                if (an != null)
                {
                    tn.DefaultName = an.AttributeName;
                }
            }
            return(tn);
        }