123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- using System;
- using System.ComponentModel;
- using ProtoBuf.Meta;
- #if FEAT_IKVM
- using Type = IKVM.Reflection.Type;
- using IKVM.Reflection;
- #else
- using System.Reflection;
- #endif
- namespace ProtoBuf
- {
- /// <summary>
- /// Indicates the known-types to support for an individual
- /// message. This serializes each level in the hierarchy as
- /// a nested message to retain wire-compatibility with
- /// other protocol-buffer implementations.
- /// </summary>
- [AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface, AllowMultiple = true, Inherited = false)]
- public sealed class ProtoIncludeAttribute : Attribute
- {
- ///<summary>
- /// Creates a new instance of the ProtoIncludeAttribute.
- /// </summary>
- /// <param name="tag">The unique index (within the type) that will identify this data.</param>
- /// <param name="knownType">The additional type to serialize/deserialize.</param>
- public ProtoIncludeAttribute(int tag, System.Type knownType)
- : this(tag, knownType == null ? "" : knownType.AssemblyQualifiedName) { }
- /// <summary>
- /// Creates a new instance of the ProtoIncludeAttribute.
- /// </summary>
- /// <param name="tag">The unique index (within the type) that will identify this data.</param>
- /// <param name="knownTypeName">The additional type to serialize/deserialize.</param>
- public ProtoIncludeAttribute(int tag, string knownTypeName)
- {
- if (tag <= 0) throw new ArgumentOutOfRangeException("tag", "Tags must be positive integers");
- if (Helpers.IsNullOrEmpty(knownTypeName)) throw new ArgumentNullException("knownTypeName", "Known type cannot be blank");
- this.tag = tag;
- this.knownTypeName = knownTypeName;
- }
- /// <summary>
- /// Gets the unique index (within the type) that will identify this data.
- /// </summary>
- public int Tag { get { return tag; } }
- private readonly int tag;
- /// <summary>
- /// Gets the additional type to serialize/deserialize.
- /// </summary>
- public string KnownTypeName { get { return knownTypeName; } }
- private readonly string knownTypeName;
- /// <summary>
- /// Gets the additional type to serialize/deserialize.
- /// </summary>
- public Type KnownType
- {
- get
- {
- return TypeModel.ResolveKnownType(KnownTypeName, null, null);
- }
- }
- /// <summary>
- /// Specifies whether the inherited sype's sub-message should be
- /// written with a length-prefix (default), or with group markers.
- /// </summary>
- [DefaultValue(DataFormat.Default)]
- public DataFormat DataFormat
- {
- get { return dataFormat; }
- set { dataFormat = value; }
- }
- private DataFormat dataFormat = DataFormat.Default;
- }
- }
|