77 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C#
		
	
	
		
		
			
		
	
	
			77 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C#
		
	
	
| 
								 | 
							
								using System;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								namespace ProtoBuf
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								    /// <summary>
							 | 
						|||
| 
								 | 
							
								    /// Additional information about a serialization operation
							 | 
						|||
| 
								 | 
							
								    /// </summary>
							 | 
						|||
| 
								 | 
							
								    public sealed class SerializationContext
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        private bool frozen;
							 | 
						|||
| 
								 | 
							
								        internal void Freeze() { frozen = true; }
							 | 
						|||
| 
								 | 
							
								        private void ThrowIfFrozen() { if (frozen) throw new InvalidOperationException("The serialization-context cannot be changed once it is in use"); }
							 | 
						|||
| 
								 | 
							
								        private object context;
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// Gets or sets a user-defined object containing additional information about this serialization/deserialization operation.
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        public object Context
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            get { return context; }
							 | 
						|||
| 
								 | 
							
								            set { if (context != value) { ThrowIfFrozen(); context = value; } }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        private static readonly SerializationContext @default;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        static SerializationContext()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            @default = new SerializationContext();
							 | 
						|||
| 
								 | 
							
								            @default.Freeze();
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// A default SerializationContext, with minimal information.
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        internal static SerializationContext Default => @default;
							 | 
						|||
| 
								 | 
							
								#if PLAT_BINARYFORMATTER
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#if !(COREFX || PROFILE259)
							 | 
						|||
| 
								 | 
							
								        private System.Runtime.Serialization.StreamingContextStates state = System.Runtime.Serialization.StreamingContextStates.Persistence;
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// Gets or sets the source or destination of the transmitted data.
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        public System.Runtime.Serialization.StreamingContextStates State
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            get { return state; }
							 | 
						|||
| 
								 | 
							
								            set { if (state != value) { ThrowIfFrozen(); state = value; } }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								#endif
							 | 
						|||
| 
								 | 
							
										/// <summary>
							 | 
						|||
| 
								 | 
							
										/// Convert a SerializationContext to a StreamingContext
							 | 
						|||
| 
								 | 
							
										/// </summary>
							 | 
						|||
| 
								 | 
							
										public static implicit operator System.Runtime.Serialization.StreamingContext(SerializationContext ctx)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								#if COREFX
							 | 
						|||
| 
								 | 
							
											return new System.Runtime.Serialization.StreamingContext();
							 | 
						|||
| 
								 | 
							
								#else
							 | 
						|||
| 
								 | 
							
								            if (ctx == null) return new System.Runtime.Serialization.StreamingContext(System.Runtime.Serialization.StreamingContextStates.Persistence);
							 | 
						|||
| 
								 | 
							
								            return new System.Runtime.Serialization.StreamingContext(ctx.state, ctx.context);
							 | 
						|||
| 
								 | 
							
								#endif
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// Convert a StreamingContext to a SerializationContext
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        public static implicit operator SerializationContext (System.Runtime.Serialization.StreamingContext ctx)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            SerializationContext result = new SerializationContext();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#if !(COREFX || PROFILE259)
							 | 
						|||
| 
								 | 
							
								            result.Context = ctx.Context;
							 | 
						|||
| 
								 | 
							
								            result.State = ctx.State;
							 | 
						|||
| 
								 | 
							
								#endif
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
											return result;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								#endif
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								}
							 |