X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2Fcorlib%2FSystem.Runtime.Serialization.Formatters.Binary%2FBinaryCommon.cs;h=19be6da75e22265afb67e33de199ef4d85f55a49;hb=9e3370d3351358044231dd1f3df5fff3720bdcc2;hp=0812f956174c33937a1c565607019416f1b12c4c;hpb=e271cc193ccacb6dfc6873874cf3d00765f87c3a;p=mono.git diff --git a/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/BinaryCommon.cs b/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/BinaryCommon.cs index 0812f956174..19be6da75e2 100644 --- a/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/BinaryCommon.cs +++ b/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/BinaryCommon.cs @@ -4,6 +4,29 @@ // Lluis Sanchez Gual (lluis@ideary.com) // // (C) 2003 Lluis Sanchez Gual + +// +// Copyright (C) 2004 Novell, Inc (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// using System; @@ -16,6 +39,7 @@ namespace System.Runtime.Serialization.Formatters.Binary static Type[] _typeCodesToType; static byte[] _typeCodeMap; + public static bool UseReflectionSerialization = false; static BinaryCommon() { @@ -57,6 +81,12 @@ namespace System.Runtime.Serialization.Formatters.Binary // TimeStamp does not have a TypeCode, so it is managed as a special // case in GetTypeCode() + + // This environment variable is only for test and benchmarking pourposes. + // By default, mono will always use IL generated class serializers. + string s = Environment.GetEnvironmentVariable("MONO_REFLECTION_SERIALIZER"); + if (s == null) s = "no"; + UseReflectionSerialization = (s != "no"); } public static bool IsPrimitive (Type type) @@ -77,6 +107,17 @@ namespace System.Runtime.Serialization.Formatters.Binary { return _typeCodesToType [code]; } + + public static void CheckSerializable (Type type, ISurrogateSelector selector, StreamingContext context) + { + if (!type.IsSerializable && !type.IsInterface) + { + if (selector != null && selector.GetSurrogate (type, context, out selector) != null) + return; + + throw new SerializationException ("Type " + type + " is not marked as Serializable."); + } + } } internal enum BinaryElement : byte