/// <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() }); }
/// <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<T>.</remarks> public static Task <byte[]> SerializeAsync <T>(T obj, IncludedVisibility visibility) { var task = Task.Factory.StartNew(() => Serialize(obj, visibility)); return(task); }
/// <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<T>.</remarks> public static byte[] Serialize <T>(T obj, IncludedVisibility visibility) { return(Serialize(obj, IncludedMembers.Properties | IncludedMembers.Properties, visibility)); }
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"); }
/// <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); }
/// <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); }
/// <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<T>.</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); }