Exemple #1
0
        /// <summary>
        /// Serializes the specified members of the given instance to a byte array.
        /// </summary>
        /// <typeparam name="T">The type being serialized.</typeparam>
        /// <param name="obj">The existing instance to be serialized.</param>
        /// <param name="members">The members to serialize, either Fields, Properties, or both.</param>
        /// <param name="visibility">The visibility of fields and properties to serialize, some combination of Public, Protected, Internal, and Private.</param>
        /// <returns>A byte array representing the specified members of obj.</returns>
        public static byte[] Serialize <T>(T obj, IncludedMembers members, IncludedVisibility visibility)
        {
            using (var mem = new MemoryStream())
            {
                Serialize(mem, obj, members, visibility);

                return(mem.ToArray());
            }
        }
        public static CutdownType Get(IncludedMembers members, IncludedVisibility visibility)
        {
            var props  = new List <PropertyInfo>();
            var fields = new List <FieldInfo>();

            if (members.HasFlag(IncludedMembers.Properties))
            {
                if (visibility.HasFlag(IncludedVisibility.Public))
                {
                    props.AddRange(Singleton.PublicProperties);
                }

                if (visibility.HasFlag(IncludedVisibility.Private))
                {
                    props.AddRange(Singleton.PrivateProperties);
                }

                if (visibility.HasFlag(IncludedVisibility.Protected))
                {
                    props.AddRange(Singleton.ProtectedProperties);
                }

                if (visibility.HasFlag(IncludedVisibility.Internal))
                {
                    props.AddRange(Singleton.InternalProperties);
                }
            }

            if (members.HasFlag(IncludedMembers.Fields))
            {
                if (visibility.HasFlag(IncludedVisibility.Public))
                {
                    fields.AddRange(Singleton.PublicFields);
                }

                if (visibility.HasFlag(IncludedVisibility.Private))
                {
                    fields.AddRange(Singleton.PrivateFields);
                }

                if (visibility.HasFlag(IncludedVisibility.Protected))
                {
                    fields.AddRange(Singleton.ProtectedFields);
                }

                if (visibility.HasFlag(IncludedVisibility.Internal))
                {
                    fields.AddRange(Singleton.InternalFields);
                }
            }

            return(new CutdownType {
                Fields = fields.Distinct().ToList(), Properties = props.Distinct().ToList()
            });
        }
Exemple #3
0
        /// <summary>
        /// Asynchronously, serializes the specified fields and properties of the given instance to a byte array.
        /// </summary>
        /// <typeparam name="T">The type being serialized.</typeparam>
        /// <param name="obj">The existing instance to be serialized.</param>
        /// <param name="visibility">The visibility of fields and properties to serialize, some combination of Public, Protected, Internal, and Private.</param>
        /// <returns>A byte array representing the specified fields and properties of obj.</returns>
        /// <remarks>To specify a different collection of members to serialize, use one of the overrides of Serialize&lt;T&gt;.</remarks>
        public static Task <byte[]> SerializeAsync <T>(T obj, IncludedVisibility visibility)
        {
            var task = Task.Factory.StartNew(() => Serialize(obj, visibility));

            return(task);
        }
Exemple #4
0
 /// <summary>
 /// Serializes the specified fields and properties of the given instance to a byte array.
 /// </summary>
 /// <typeparam name="T">The type being serialized.</typeparam>
 /// <param name="obj">The existing instance to be serialized.</param>
 /// <param name="visibility">The visibility of fields and properties to serialize, some combination of Public, Protected, Internal, and Private.</param>
 /// <returns>A byte array representing the specified fields and properties of obj.</returns>
 /// <remarks>To specify a different collection of members to serialize, use one of the overrides of Serialize&lt;T&gt;.</remarks>
 public static byte[] Serialize <T>(T obj, IncludedVisibility visibility)
 {
     return(Serialize(obj, IncludedMembers.Properties | IncludedMembers.Properties, visibility));
 }
Exemple #5
0
        internal static void GetDescriptionAndBuilder <T>(IncludedMembers members, IncludedVisibility visibility, out TypeDescription description, out POCOBuilder builder)
        {
            if (visibility == IncludedVisibility.Public)
            {
                if (members == (IncludedMembers.Properties | IncludedMembers.Fields))
                {
                    description = AllPublicDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, AllPublicDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Fields)
                {
                    description = FieldsPublicDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, FieldsPublicDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Properties)
                {
                    description = PropertiesPublicDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, PropertiesPublicDescriber <T> > .GetMapper();

                    return;
                }

                throw new ArgumentOutOfRangeException("members");
            }

            if (visibility == (IncludedVisibility.Public | IncludedVisibility.Internal))
            {
                if (members == (IncludedMembers.Properties | IncludedMembers.Fields))
                {
                    description = AllPublicInternalDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, AllPublicInternalDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Fields)
                {
                    description = FieldsPublicInternalDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, FieldsPublicInternalDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Properties)
                {
                    description = PropertiesPublicInternalDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, PropertiesPublicInternalDescriber <T> > .GetMapper();

                    return;
                }

                throw new ArgumentOutOfRangeException("members");
            }

            if (visibility == (IncludedVisibility.Public | IncludedVisibility.Protected))
            {
                if (members == (IncludedMembers.Properties | IncludedMembers.Fields))
                {
                    description = AllPublicProtectedDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, AllPublicProtectedDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Fields)
                {
                    description = FieldsPublicProtectedDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, FieldsPublicProtectedDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Properties)
                {
                    description = PropertiesPublicProtectedDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, PropertiesPublicProtectedDescriber <T> > .GetMapper();

                    return;
                }

                throw new ArgumentOutOfRangeException("members");
            }

            if (visibility == (IncludedVisibility.Public | IncludedVisibility.Private))
            {
                if (members == (IncludedMembers.Properties | IncludedMembers.Fields))
                {
                    description = AllPublicPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, AllPublicPrivateDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Fields)
                {
                    description = FieldsPublicPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, FieldsPublicPrivateDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Properties)
                {
                    description = PropertiesPublicPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, PropertiesPublicPrivateDescriber <T> > .GetMapper();

                    return;
                }

                throw new ArgumentOutOfRangeException("members");
            }

            if (visibility == (IncludedVisibility.Public | IncludedVisibility.Protected | IncludedVisibility.Internal))
            {
                if (members == (IncludedMembers.Properties | IncludedMembers.Fields))
                {
                    description = AllPublicProtectedInternalDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, AllPublicProtectedInternalDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Fields)
                {
                    description = FieldsPublicProtectedInternalDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, FieldsPublicProtectedInternalDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Properties)
                {
                    description = PropertiesPublicProtectedInternalDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, PropertiesPublicProtectedInternalDescriber <T> > .GetMapper();

                    return;
                }

                throw new ArgumentOutOfRangeException("members");
            }

            if (visibility == (IncludedVisibility.Public | IncludedVisibility.Protected | IncludedVisibility.Private))
            {
                if (members == (IncludedMembers.Properties | IncludedMembers.Fields))
                {
                    description = AllPublicProtectedPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, AllPublicProtectedPrivateDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Fields)
                {
                    description = FieldsPublicProtectedPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, FieldsPublicProtectedPrivateDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Properties)
                {
                    description = PropertiesPublicProtectedPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, PropertiesPublicProtectedPrivateDescriber <T> > .GetMapper();

                    return;
                }

                throw new ArgumentOutOfRangeException("members");
            }

            if (visibility == (IncludedVisibility.Public | IncludedVisibility.Internal | IncludedVisibility.Private))
            {
                if (members == (IncludedMembers.Properties | IncludedMembers.Fields))
                {
                    description = AllPublicInternalPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, AllPublicInternalPrivateDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Fields)
                {
                    description = FieldsPublicInternalPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, FieldsPublicInternalPrivateDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Properties)
                {
                    description = PropertiesPublicInternalPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, PropertiesPublicInternalPrivateDescriber <T> > .GetMapper();

                    return;
                }

                throw new ArgumentOutOfRangeException("members");
            }

            if (visibility == (IncludedVisibility.Public | IncludedVisibility.Internal | IncludedVisibility.Protected | IncludedVisibility.Private))
            {
                if (members == (IncludedMembers.Properties | IncludedMembers.Fields))
                {
                    description = AllAllDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, AllAllDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Fields)
                {
                    description = FieldsAllDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, FieldsAllDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Properties)
                {
                    description = PropertiesAllDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, PropertiesAllDescriber <T> > .GetMapper();

                    return;
                }

                throw new ArgumentOutOfRangeException("members");
            }

            if (visibility == IncludedVisibility.Protected)
            {
                if (members == (IncludedMembers.Properties | IncludedMembers.Fields))
                {
                    description = AllProtectedDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, AllProtectedDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Fields)
                {
                    description = FieldsProtectedDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, FieldsProtectedDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Properties)
                {
                    description = PropertiesProtectedDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, PropertiesProtectedDescriber <T> > .GetMapper();

                    return;
                }

                throw new ArgumentOutOfRangeException("members");
            }

            if (visibility == (IncludedVisibility.Protected | IncludedVisibility.Internal))
            {
                if (members == (IncludedMembers.Properties | IncludedMembers.Fields))
                {
                    description = AllProtectedInternalDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, AllProtectedInternalDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Fields)
                {
                    description = FieldsProtectedInternalDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, FieldsProtectedInternalDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Properties)
                {
                    description = PropertiesProtectedInternalDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, PropertiesProtectedInternalDescriber <T> > .GetMapper();

                    return;
                }

                throw new ArgumentOutOfRangeException("members");
            }

            if (visibility == (IncludedVisibility.Protected | IncludedVisibility.Private))
            {
                if (members == (IncludedMembers.Properties | IncludedMembers.Fields))
                {
                    description = AllProtectedPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, AllProtectedPrivateDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Fields)
                {
                    description = FieldsProtectedPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, FieldsProtectedPrivateDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Properties)
                {
                    description = PropertiesProtectedPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, PropertiesProtectedPrivateDescriber <T> > .GetMapper();

                    return;
                }

                throw new ArgumentOutOfRangeException("members");
            }

            if (visibility == (IncludedVisibility.Protected | IncludedVisibility.Internal | IncludedVisibility.Private))
            {
                if (members == (IncludedMembers.Properties | IncludedMembers.Fields))
                {
                    description = AllProtectedInternalPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, AllProtectedInternalPrivateDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Fields)
                {
                    description = FieldsProtectedInternalPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, FieldsProtectedInternalPrivateDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Properties)
                {
                    description = PropertiesProtectedInternalPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, PropertiesProtectedInternalPrivateDescriber <T> > .GetMapper();

                    return;
                }

                throw new ArgumentOutOfRangeException("members");
            }

            if (visibility == IncludedVisibility.Internal)
            {
                if (members == (IncludedMembers.Properties | IncludedMembers.Fields))
                {
                    description = AllInternalDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, AllInternalDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Fields)
                {
                    description = FieldsInternalDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, FieldsInternalDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Properties)
                {
                    description = PropertiesInternalDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, PropertiesInternalDescriber <T> > .GetMapper();

                    return;
                }

                throw new ArgumentOutOfRangeException("members");
            }

            if (visibility == (IncludedVisibility.Internal | IncludedVisibility.Private))
            {
                if (members == (IncludedMembers.Properties | IncludedMembers.Fields))
                {
                    description = AllInternalPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, AllInternalPrivateDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Fields)
                {
                    description = FieldsInternalPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, FieldsInternalPrivateDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Properties)
                {
                    description = PropertiesInternalPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, PropertiesInternalPrivateDescriber <T> > .GetMapper();

                    return;
                }

                throw new ArgumentOutOfRangeException("members");
            }

            if (visibility == IncludedVisibility.Private)
            {
                if (members == (IncludedMembers.Properties | IncludedMembers.Fields))
                {
                    description = AllPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, AllPrivateDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Fields)
                {
                    description = FieldsPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, FieldsPrivateDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Properties)
                {
                    description = PropertiesPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, PropertiesPrivateDescriber <T> > .GetMapper();

                    return;
                }

                throw new ArgumentOutOfRangeException("members");
            }

            throw new ArgumentOutOfRangeException("visibility");
        }
Exemple #6
0
        /// <summary>
        /// Asynchronously, serializes the specified members of the given instance to the given Stream.
        /// </summary>
        /// <typeparam name="T">The type being serialized.</typeparam>
        /// <param name="stream">The stream to serialize obj to.</param>
        /// <param name="obj">The existing instance to be serialized.</param>
        /// <param name="members">The members to serialize, either Fields, Properties, or both.</param>
        /// <param name="visibility">The visibility of fields and properties to serialize, some combination of Public, Protected, Internal, and Private.</param>
        public static Task SerializeAsync <T>(Stream stream, T obj, IncludedMembers members, IncludedVisibility visibility)
        {
            var task = Task.Factory.StartNew(() => Serialize(stream, obj, members, visibility));

            return(task);
        }
Exemple #7
0
        /// <summary>
        /// Serializes the specified members of the given instance to the given Stream.
        /// </summary>
        /// <typeparam name="T">The type being serialized.</typeparam>
        /// <param name="stream">The stream to serialize obj to.</param>
        /// <param name="obj">The existing instance to be serialized.</param>
        /// <param name="members">The members to serialize, either Fields, Properties, or both.</param>
        /// <param name="visibility">The visibility of fields and properties to serialize, some combination of Public, Protected, Internal, and Private.</param>
        public static void Serialize <T>(Stream stream, T obj, IncludedMembers members, IncludedVisibility visibility)
        {
            if (stream == null)
            {
                throw new ArgumentNullException("stream");
            }
            if (members == 0)
            {
                throw new ArgumentException("members");
            }
            if (visibility == 0)
            {
                throw new ArgumentException("visibility");
            }

            // Protobuf-net special cases arrays (or List<T>; depending on how you look at it) at a top level
            //   So we need to special case it so arrays and lists end up with the same serialization.
            if (typeof(T).IsArray)
            {
                ArrayThunk <T> .Serialize(stream, obj, members, visibility);

                return;
            }

            TypeDescription desc;
            POCOBuilder     builder;

            GetDescriptionAndBuilder <T>(members, visibility, out desc, out builder);

            string pathToBadType;

            if (desc.ContainsRawObject(out pathToBadType))
            {
                pathToBadType = "Root" + pathToBadType;
                throw new ArgumentException("Type " + typeof(T).FullName + " contains a System.Object, which cannot be sensibly serialized.  Use a more specific type.  (path to System.Object reference: " + pathToBadType + ")");
            }

            var envelope = Envelope.Get(desc, builder, obj);

            ProtoBuf.Serializer.Serialize(stream, envelope);
        }
Exemple #8
0
 /// <summary>
 /// Serializes the specified fields and properties of the given instance to the given Stream.
 /// </summary>
 /// <typeparam name="T">The type being serialized.</typeparam>
 /// <param name="stream">The stream to serialize obj to.</param>
 /// <param name="obj">The existing instance to be serialized.</param>
 /// <param name="visibility">The visibility of fields and properties to serialize, some combination of Public, Protected, Internal, and Private.</param>
 /// <remarks>To specify a different collection of members to serialize, use one of the overrides of Serialize&lt;T&gt;.</remarks>
 public static void Serialize <T>(Stream stream, T obj, IncludedVisibility visibility)
 {
     Serialize(stream, obj, IncludedMembers.Properties | IncludedMembers.Fields, visibility);
 }
        public static void Serialize(Stream stream, object array, IncludedMembers members, IncludedVisibility visibility)
        {
            var passThrough = CreatePassthrough(array);

            SerializeDelegate(stream, passThrough, members, visibility);
        }