コード例 #1
0
        /// <summary>
        /// Gets the context.
        /// </summary>
        /// <param name="model">The model, can be <c>null</c> for value types.</param>
        /// <param name="modelType">Type of the model.</param>
        /// <param name="stream">The stream.</param>
        /// <param name="contextMode">The context mode.</param>
        /// <param name="memberValues">The member values.</param>
        /// <param name="configuration">The configuration.</param>
        /// <returns>
        /// The serialization context.
        /// </returns>
        private ISerializationContext <BinarySerializationContextInfo> GetContext(object model, Type modelType, Stream stream,
                                                                                  SerializationContextMode contextMode, List <MemberValue> memberValues, ISerializationConfiguration configuration)
        {
            var serializationInfo = new SerializationInfo(model.GetType(), new FormatterConverter());
            var binaryFormatter   = CreateBinaryFormatter(contextMode);

            if (memberValues == null)
            {
                memberValues = new List <MemberValue>();
            }

            var contextInfo = new BinarySerializationContextInfo(serializationInfo, memberValues, binaryFormatter);

            return(new SerializationContext <BinarySerializationContextInfo>(model, modelType, contextInfo, contextMode, configuration));
        }
コード例 #2
0
        /// <summary>
        /// Configures the binary formatter.
        /// </summary>
        /// <param name="contextMode">The context mode.</param>
        /// <returns>The binary formatter.</returns>
        private BinaryFormatter CreateBinaryFormatter(SerializationContextMode contextMode)
        {
            var binaryFormatter = new BinaryFormatter();

            binaryFormatter.AssemblyFormat = FormatterAssemblyStyle.Simple;
            binaryFormatter.FilterLevel    = TypeFilterLevel.Full;
            binaryFormatter.TypeFormat     = FormatterTypeStyle.TypesWhenNeeded;

            if (contextMode == SerializationContextMode.Deserialization)
            {
                binaryFormatter.Binder = DeserializationBinder;
            }

            return(binaryFormatter);
        }
コード例 #3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="SerializationContext{TContext}" /> class.
        /// </summary>
        /// <param name="model">The model.</param>
        /// <param name="context">The context.</param>
        /// <param name="contextMode">The context mode.</param>
        /// <exception cref="ArgumentNullException">The <paramref name="model" /> is <c>null</c>.</exception>
        /// <exception cref="ArgumentNullException">The <paramref name="context" /> is <c>null</c>.</exception>
        public SerializationContext(ModelBase model, TContext context, SerializationContextMode contextMode)
        {
            Argument.IsNotNull("model", model);
            Argument.IsNotNull("context", context);

            Model       = model;
            ModelType   = model.GetType();
            Context     = context;
            ContextMode = contextMode;

            var scopeName = SerializationContextHelper.GetSerializationReferenceManagerScopeName();

            _referenceManagerScopeManager = ScopeManager <ReferenceManager> .GetScopeManager(scopeName);

            ReferenceManager = _referenceManagerScopeManager.ScopeObject;
        }
コード例 #4
0
        /// <summary>
        /// Gets the serializer specific serialization context info.
        /// </summary>
        /// <param name="model">The model, can be <c>null</c> for value types.</param>
        /// <param name="modelType">Type of the model.</param>
        /// <param name="stream">The stream.</param>
        /// <param name="contextMode">The context mode.</param>
        /// <param name="configuration">The configuration.</param>
        /// <returns>
        /// The serialization context.
        /// </returns>
        /// <exception cref="ArgumentNullException">The <paramref name="model" /> is <c>null</c>.</exception>
        /// <exception cref="ArgumentNullException">The <paramref name="modelType" /> is <c>null</c>.</exception>
        /// <exception cref="ArgumentNullException">The <paramref name="configuration" /> is <c>null</c>.</exception>
        protected override ISerializationContext<XmlSerializationContextInfo> GetSerializationContextInfo(object model, Type modelType, Stream stream,
            SerializationContextMode contextMode, ISerializationConfiguration configuration)
        {
            XDocument document = null;

            try
            {
                if (stream.Length != 0)
                {
                    document = XDocument.Load(stream);
                }
            }
            catch (Exception ex)
            {
                Log.Warning(ex, "Failed to load document from stream, falling back to empty document");
            }

            var isNewDocument = document == null;
            if (isNewDocument)
            {
                var rootName = "root";
                if (model != null)
                {
                    rootName = _rootNameCache.GetFromCacheOrFetch(modelType, () =>
                    {
                        return GetXmlElementName(modelType, model, null);
                    });
                }

                document = new XDocument(new XElement(rootName));
            }

            var contextInfo = new XmlSerializationContextInfo(document.Root, model);
            var context = new SerializationContext<XmlSerializationContextInfo>(model, modelType, contextInfo, contextMode, configuration);

            if (isNewDocument)
            {
                AddReferenceId(context, document.Root, model);
            }

            return context;
        }
コード例 #5
0
ファイル: SerializationContext.cs プロジェクト: wushian/Catel
        /// <summary>
        /// Initializes a new instance of the <see cref="SerializationContext{TContext}" /> class.
        /// </summary>
        /// <param name="model">The model, can be <c>null</c> for value types.</param>
        /// <param name="modelType">Type of the model.</param>
        /// <param name="context">The context.</param>
        /// <param name="contextMode">The context mode.</param>
        /// <param name="configuration">The configuration.</param>
        /// <exception cref="ArgumentNullException">The <paramref name="modelType" /> is <c>null</c>.</exception>
        /// <exception cref="ArgumentNullException">The <paramref name="modelType" /> is <c>null</c>.</exception>
        /// <exception cref="ArgumentNullException">The <paramref name="modelType" /> is <c>null</c>.</exception>
        public SerializationContext(object model, Type modelType, TSerializationContextInfo context,
                                    SerializationContextMode contextMode, ISerializationConfiguration configuration = null)
        {
            Argument.IsNotNull("modelType", modelType);
            Argument.IsNotNull("context", context);
            Argument.IsNotNull("configuration", configuration);

            Model         = model;
            ModelType     = modelType;
            ModelTypeName = modelType.GetSafeFullName(false);
            Context       = context;
            ContextMode   = contextMode;
            TypeStack     = new Stack <Type>();
            Configuration = configuration;

            var scopeName = SerializationContextHelper.GetSerializationScopeName();

            _scopeManager = ScopeManager <SerializationContextScope <TSerializationContextInfo> > .GetScopeManager(scopeName, () => new SerializationContextScope <TSerializationContextInfo>());

            var contextScope = _scopeManager.ScopeObject;

            TypeStack        = contextScope.TypeStack;
            ReferenceManager = contextScope.ReferenceManager;
            Contexts         = contextScope.Contexts;

            var contexts = contextScope.Contexts;

            if (contexts.Count > 0)
            {
                Parent = contexts.Peek();
            }

            var serializationContextInfoParentSetter = context as ISerializationContextContainer;

            if (serializationContextInfoParentSetter != null)
            {
                serializationContextInfoParentSetter.SetSerializationContext(this);
            }

            Initialize();
        }
コード例 #6
0
        /// <summary>
        /// Initializes a new instance of the <see cref="SerializationContext{TContext}" /> class.
        /// </summary>
        /// <param name="model">The model, can be <c>null</c> for value types.</param>
        /// <param name="modelType">Type of the model.</param>
        /// <param name="context">The context.</param>
        /// <param name="contextMode">The context mode.</param>
        /// <exception cref="ArgumentNullException">The <paramref name="modelType" /> is <c>null</c>.</exception>
        /// <exception cref="ArgumentNullException">The <paramref name="context" /> is <c>null</c>.</exception>
        public SerializationContext(object model, Type modelType, TContext context, SerializationContextMode contextMode)
        {
            Argument.IsNotNull("modelType", modelType);
            Argument.IsNotNull("context", context);

            Model       = model;
            ModelType   = modelType;
            Context     = context;
            ContextMode = contextMode;
            TypeStack   = new Stack <Type>();

            var scopeName = SerializationContextHelper.GetSerializationReferenceManagerScopeName();

            _typeStackScopeManager = ScopeManager <Stack <Type> > .GetScopeManager(scopeName, () => new Stack <Type>());

            TypeStack = _typeStackScopeManager.ScopeObject;

            _referenceManagerScopeManager = ScopeManager <ReferenceManager> .GetScopeManager(scopeName);

            ReferenceManager = _referenceManagerScopeManager.ScopeObject;

            _serializableToken = CreateSerializableToken();
        }
コード例 #7
0
ファイル: SerializationContext.cs プロジェクト: wqhenry/Catel
 public SerializationContext(object model, Type modelType, TContext context, SerializationContextMode contextMode)
     : this(model, modelType, context, contextMode, null)
 {
 }
コード例 #8
0
ファイル: JsonSerializer.cs プロジェクト: wushian/Catel
#pragma warning disable 672
        protected override ISerializationContext <JsonSerializationContextInfo> GetContext(object model, Type modelType, Stream stream,
#pragma warning restore 672
                                                                                           SerializationContextMode contextMode, ISerializationConfiguration configuration)
        {
            return(GetSerializationContextInfo(model, modelType, stream, contextMode, configuration));
        }
コード例 #9
0
        /// <summary>
        /// Gets the context for the specified model type.
        /// <para />
        /// Use this method when no model instance is available. This method will create one.
        /// </summary>
        /// <param name="modelType">Type of the model.</param>
        /// <param name="stream">The stream.</param>
        /// <param name="contextMode">The context mode.</param>
        /// <returns>The serialization context.</returns>
        /// <exception cref="ArgumentNullException">The <paramref name="modelType" /> is <c>null</c>.</exception>
        /// <exception cref="ArgumentNullException">The <paramref name="stream" /> is <c>null</c>.</exception>
        protected ISerializationContext <TSerializationContext> GetContext(Type modelType, Stream stream, SerializationContextMode contextMode)
        {
            Argument.IsNotNull("type", modelType);
            Argument.IsNotNull("stream", stream);

            var model = CreateModelInstance(modelType);

            return(GetContext(model, modelType, stream, contextMode));
        }
コード例 #10
0
        /// <summary>
        /// Gets the context for the specified model type.
        /// <para />
        /// Use this method when no model instance is available. This method will create one.
        /// </summary>
        /// <param name="modelType">Type of the model.</param>
        /// <param name="context">The context.</param>
        /// <param name="contextMode">The context mode.</param>
        /// <returns>The serialization context.</returns>
        /// <exception cref="ArgumentNullException">The <paramref name="modelType" /> is <c>null</c>.</exception>
        /// <exception cref="ArgumentNullException">The <paramref name="context" /> is <c>null</c>.</exception>
        protected ISerializationContext <TSerializationContext> GetContext(Type modelType, TSerializationContext context, SerializationContextMode contextMode)
        {
            Argument.IsNotNull("type", modelType);
            Argument.IsNotNull("context", context);

            var model = CreateModelInstance(modelType);

            return(GetContext(model, modelType, context, contextMode));
        }
コード例 #11
0
 protected ISerializationContext <TSerializationContext> GetContext(Type modelType, Stream stream, SerializationContextMode contextMode)
 {
     return(GetContext(modelType, stream, contextMode, null));
 }
コード例 #12
0
ファイル: JsonSerializer.cs プロジェクト: ugurak/Catel
        /// <summary>
        /// Gets the context.
        /// </summary>
        /// <param name="model">The model.</param>
        /// <param name="modelType">Type of the model.</param>
        /// <param name="stream">The stream.</param>
        /// <param name="contextMode">The context mode.</param>
        /// <param name="configuration">The configuration.</param>
        /// <returns>
        /// ISerializationContext{SerializationInfo}.
        /// </returns>
        /// <exception cref="System.ArgumentOutOfRangeException">contextMode</exception>
        protected override ISerializationContext <JsonSerializationContextInfo> GetContext(object model, Type modelType, Stream stream,
                                                                                           SerializationContextMode contextMode, ISerializationConfiguration configuration)
        {
            JsonReader jsonReader = null;
            JsonWriter jsonWriter = null;

            var useBson              = false;
            var dateTimeKind         = DateTimeKind.Unspecified;
            var dateParseHandling    = DateParseHandling.None;
            var dateTimeZoneHandling = DateTimeZoneHandling.Unspecified;

            var jsonConfiguration = configuration as JsonSerializationConfiguration;

            if (jsonConfiguration != null)
            {
                useBson              = jsonConfiguration.UseBson;
                dateTimeKind         = jsonConfiguration.DateTimeKind;
                dateParseHandling    = jsonConfiguration.DateParseHandling;
                dateTimeZoneHandling = jsonConfiguration.DateTimeZoneHandling;
            }

            switch (contextMode)
            {
            case SerializationContextMode.Serialization:
                if (useBson)
                {
                    jsonWriter = new BsonWriter(stream);
                }
                else
                {
                    var streamWriter = new StreamWriter(stream, Encoding.UTF8);
                    jsonWriter = new JsonTextWriter(streamWriter);
                }
                break;

            case SerializationContextMode.Deserialization:
                if (useBson)
                {
                    var shouldSerializeAsCollection = false;
                    var shouldSerializeAsDictionary = ShouldSerializeAsDictionary(modelType);
                    if (!shouldSerializeAsDictionary)
                    {
                        // Only check if we should deserialize as collection if we are not a dictionary
                        shouldSerializeAsCollection = ShouldSerializeAsCollection(modelType);
                    }

                    jsonReader = new BsonReader(stream, shouldSerializeAsCollection, dateTimeKind);
                }
                else
                {
                    var streamReader = new StreamReader(stream, Encoding.UTF8);
                    jsonReader = new JsonTextReader(streamReader);
                }
                break;

            default:
                throw new ArgumentOutOfRangeException("contextMode");
            }

            if (jsonReader != null)
            {
                jsonReader.Culture              = configuration.Culture;
                jsonReader.DateParseHandling    = dateParseHandling;
                jsonReader.DateTimeZoneHandling = dateTimeZoneHandling;
            }

            if (jsonWriter != null)
            {
                jsonWriter.Culture = configuration.Culture;
                jsonWriter.DateTimeZoneHandling = dateTimeZoneHandling;
            }

            return(GetContext(model, modelType, jsonReader, jsonWriter, contextMode, null, null, configuration));
        }
コード例 #13
0
 protected virtual ISerializationContext <TSerializationContext> GetContext(object model, Type modelType,
                                                                            TSerializationContext context, SerializationContextMode contextMode)
 {
     return(GetContext(model, modelType, context, contextMode, null));
 }
コード例 #14
0
 /// <summary>
 /// Gets the context.
 /// </summary>
 /// <param name="model">The model.</param>
 /// <param name="stream">The stream.</param>
 /// <param name="contextMode">The context mode.</param>
 /// <returns>ISerializationContext{SerializationInfo}.</returns>
 protected override ISerializationContext <BinarySerializationContextInfo> GetContext(ModelBase model, Stream stream, SerializationContextMode contextMode)
 {
     return(GetContext(model, stream, contextMode, null));
 }
コード例 #15
0
        /// <summary>
        /// Gets the context for the specified model instance.
        /// </summary>
        /// <param name="model">The model, can be <c>null</c> for value types.</param>
        /// <param name="modelType">Type of the model.</param>
        /// <param name="context">The context.</param>
        /// <param name="contextMode">The context mode.</param>
        /// <param name="configuration">The configuration.</param>
        /// <returns>
        /// The serialization context.
        /// </returns>
        /// <exception cref="ArgumentNullException">The <paramref name="model" /> is <c>null</c>.</exception>
        /// <exception cref="ArgumentNullException">The <paramref name="modelType" /> is <c>null</c>.</exception>
        /// <exception cref="ArgumentNullException">The <paramref name="configuration" /> is <c>null</c>.</exception>
        protected virtual ISerializationContext <TSerializationContext> GetContext(object model, Type modelType,
                                                                                   TSerializationContext context, SerializationContextMode contextMode, ISerializationConfiguration configuration = null)
        {
            Argument.IsNotNull("modelType", modelType);
            Argument.IsNotNull("context", context);

            return(new SerializationContext <TSerializationContext>(model, modelType, context, contextMode, configuration));
        }
コード例 #16
0
        /// <summary>
        /// Gets the context.
        /// </summary>
        /// <param name="model">The model.</param>
        /// <param name="stream">The stream.</param>
        /// <param name="contextMode">The context mode.</param>
        /// <returns>The serialization context.</returns>
        protected override ISerializationContext <XmlSerializationContextInfo> GetContext(ModelBase model, Stream stream, SerializationContextMode contextMode)
        {
            XDocument document = null;

            try
            {
                if (stream.Length != 0)
                {
                    document = XDocument.Load(stream);
                }
            }
            catch (Exception ex)
            {
                Log.Warning(ex, "Failed to load document from stream, falling back to empty document");
            }

            bool isNewDocument = document == null;

            if (isNewDocument)
            {
                var rootName = (model != null) ? model.GetType().Name : "root";
                document = new XDocument(new XElement(rootName));
            }

            var contextInfo = new XmlSerializationContextInfo(document.Root, model);
            var context     = new SerializationContext <XmlSerializationContextInfo>(model, contextInfo, contextMode);

            if (isNewDocument)
            {
                AddReferenceId(context, document.Root, model);
            }

            return(context);
        }
コード例 #17
0
 protected override ISerializationContext<XmlSerializationContextInfo> GetContext(object model, Type modelType, Stream stream,
     SerializationContextMode contextMode, ISerializationConfiguration configuration)
 {
     return GetSerializationContextInfo(model, modelType, stream, contextMode, configuration);
 }
コード例 #18
0
ファイル: JsonSerializer.cs プロジェクト: xaecors/Catel
        /// <summary>
        /// Gets the serializer specific serialization context info.
        /// </summary>
        /// <param name="model">The model, can be <c>null</c> for value types.</param>
        /// <param name="modelType">Type of the model.</param>
        /// <param name="stream">The stream.</param>
        /// <param name="contextMode">The context mode.</param>
        /// <param name="configuration">The configuration.</param>
        /// <returns>
        /// The serialization context.
        /// </returns>
        /// <exception cref="ArgumentNullException">The <paramref name="model" /> is <c>null</c>.</exception>
        /// <exception cref="ArgumentNullException">The <paramref name="modelType" /> is <c>null</c>.</exception>
        /// <exception cref="ArgumentNullException">The <paramref name="configuration" /> is <c>null</c>.</exception>
        protected override ISerializationContext <JsonSerializationContextInfo> GetSerializationContextInfo(object model, Type modelType, Stream stream,
                                                                                                            SerializationContextMode contextMode, ISerializationConfiguration configuration)
        {
            JsonReader jsonReader = null;
            JsonWriter jsonWriter = null;

            var useBson              = false;
            var dateTimeKind         = DateTimeKind.Unspecified;
            var dateParseHandling    = DateParseHandling.None;
            var dateTimeZoneHandling = DateTimeZoneHandling.Unspecified;
            var formatting           = Formatting.None;

            var jsonConfiguration = configuration as JsonSerializationConfiguration;

            if (jsonConfiguration != null)
            {
                useBson              = jsonConfiguration.UseBson;
                dateTimeKind         = jsonConfiguration.DateTimeKind;
                dateParseHandling    = jsonConfiguration.DateParseHandling;
                dateTimeZoneHandling = jsonConfiguration.DateTimeZoneHandling;
                formatting           = jsonConfiguration.Formatting;
            }

            switch (contextMode)
            {
            case SerializationContextMode.Serialization:
                if (useBson)
                {
#if SUPPORT_BSON
#pragma warning disable 618
                    jsonWriter = new BsonWriter(stream);
#pragma warning restore 618
#endif
                }

                if (jsonWriter is null)
                {
                    var streamWriter = new StreamWriter(stream, Encoding.UTF8);
                    jsonWriter = new JsonTextWriter(streamWriter);
                }
                break;

            case SerializationContextMode.Deserialization:
                if (useBson)
                {
#if SUPPORT_BSON
                    var shouldSerializeAsCollection = false;
                    var shouldSerializeAsDictionary = ShouldSerializeAsDictionary(modelType);
                    if (!shouldSerializeAsDictionary)
                    {
                        // Only check if we should deserialize as collection if we are not a dictionary
                        shouldSerializeAsCollection = ShouldSerializeAsCollection(modelType);
                    }

#pragma warning disable 618
                    jsonReader = new BsonReader(stream, shouldSerializeAsCollection, dateTimeKind);
#pragma warning restore 618
#endif
                }

                if (jsonReader is null)
                {
#if DEBUG
                    var streamPosition = stream.Position;

                    var debugStreamReader = new StreamReader(stream, Encoding.UTF8);
                    var content           = debugStreamReader.ReadToEnd();

                    Log.Debug(content);

                    stream.Position = streamPosition;
#endif

                    var streamReader = new StreamReader(stream, Encoding.UTF8);
                    jsonReader = new JsonTextReader(streamReader);
                }
                break;

            default:
                throw new ArgumentOutOfRangeException("contextMode");
            }

            if (jsonReader != null)
            {
                jsonReader.Culture              = configuration.Culture;
                jsonReader.DateParseHandling    = dateParseHandling;
                jsonReader.DateTimeZoneHandling = dateTimeZoneHandling;
            }

            if (jsonWriter != null)
            {
                jsonWriter.Culture = configuration.Culture;
                jsonWriter.DateTimeZoneHandling = dateTimeZoneHandling;
                jsonWriter.Formatting           = formatting;
            }

            return(GetSerializationContextInfo(model, modelType, jsonReader, jsonWriter, contextMode, null, null, configuration));
        }
コード例 #19
0
ファイル: JsonSerializer.cs プロジェクト: Lukino2000/Catel
        /// <summary>
        /// Gets the context.
        /// </summary>
        /// <param name="model">The model.</param>
        /// <param name="modelType">Type of the model.</param>
        /// <param name="stream">The stream.</param>
        /// <param name="contextMode">The context mode.</param>
        /// <returns>ISerializationContext{SerializationInfo}.</returns>
        /// <exception cref="System.ArgumentOutOfRangeException">contextMode</exception>
        protected override ISerializationContext <JsonSerializationContextInfo> GetContext(object model, Type modelType, Stream stream, SerializationContextMode contextMode)
        {
            JsonReader jsonReader = null;
            JsonWriter jsonWriter = null;

            switch (contextMode)
            {
            case SerializationContextMode.Serialization:
                jsonWriter = new JsonTextWriter(new StreamWriter(stream, Encoding.UTF8));
                break;

            case SerializationContextMode.Deserialization:
                jsonReader = new JsonTextReader(new StreamReader(stream, Encoding.UTF8));
                break;

            default:
                throw new ArgumentOutOfRangeException("contextMode");
            }

            return(GetContext(model, modelType, jsonReader, jsonWriter, contextMode, null, null));
        }
コード例 #20
0
 /// <summary>
 /// Gets the serializer specific serialization context info.
 /// </summary>
 /// <param name="model">The model, can be <c>null</c> for value types.</param>
 /// <param name="modelType">Type of the model.</param>
 /// <param name="stream">The stream.</param>
 /// <param name="contextMode">The context mode.</param>
 /// <param name="configuration">The configuration.</param>
 /// <returns>
 /// The serialization context.
 /// </returns>
 /// <exception cref="ArgumentNullException">The <paramref name="model" /> is <c>null</c>.</exception>
 /// <exception cref="ArgumentNullException">The <paramref name="modelType" /> is <c>null</c>.</exception>
 /// <exception cref="ArgumentNullException">The <paramref name="configuration" /> is <c>null</c>.</exception>
 protected override ISerializationContext <BinarySerializationContextInfo> GetSerializationContextInfo(object model, Type modelType, Stream stream,
                                                                                                       SerializationContextMode contextMode, ISerializationConfiguration configuration)
 {
     return(GetSerializationContextInfo(model, modelType, stream, contextMode, null, configuration));
 }
コード例 #21
0
        /// <summary>
        /// Gets the context for the specified model type.
        /// <para />
        /// Use this method when no model instance is available. This method will create one.
        /// </summary>
        /// <param name="modelType">Type of the model.</param>
        /// <param name="stream">The stream.</param>
        /// <param name="contextMode">The context mode.</param>
        /// <returns>The serialization context.</returns>
        /// <exception cref="ArgumentNullException">The <paramref name="modelType" /> is <c>null</c>.</exception>
        /// <exception cref="ArgumentNullException">The <paramref name="stream" /> is <c>null</c>.</exception>
        protected ISerializationContext <TSerializationContext> GetContext(Type modelType, Stream stream, SerializationContextMode contextMode)
        {
            Argument.IsNotNull("modelType", modelType);
            Argument.IsNotNull("stream", stream);

            var model = (ModelBase)TypeFactory.Default.CreateInstance(modelType);

            return(GetContext(model, stream, contextMode));
        }
コード例 #22
0
 /// <summary>
 /// Gets the context.
 /// </summary>
 /// <param name="model">The model, can be <c>null</c> for value types.</param>
 /// <param name="modelType">Type of the model.</param>
 /// <param name="stream">The stream.</param>
 /// <param name="contextMode">The context mode.</param>
 /// <param name="configuration">The configuration.</param>
 /// <returns>
 /// The serialization context.
 /// </returns>
 /// <exception cref="ArgumentNullException">The <paramref name="model" /> is <c>null</c>.</exception>
 /// <exception cref="ArgumentNullException">The <paramref name="modelType" /> is <c>null</c>.</exception>
 /// <exception cref="ArgumentNullException">The <paramref name="configuration" /> is <c>null</c>.</exception>
 protected abstract ISerializationContext <TSerializationContext> GetContext(object model, Type modelType, Stream stream,
                                                                             SerializationContextMode contextMode, ISerializationConfiguration configuration);
コード例 #23
0
        /// <summary>
        /// Gets the context for the specified model instance.
        /// </summary>
        /// <param name="model">The model.</param>
        /// <param name="context">The context.</param>
        /// <param name="contextMode">The context mode.</param>
        /// <returns>The serialization context.</returns>
        /// <exception cref="ArgumentNullException">The <paramref name="model" /> is <c>null</c>.</exception>
        /// <exception cref="ArgumentNullException">The <paramref name="context" /> is <c>null</c>.</exception>
        protected virtual ISerializationContext <TSerializationContext> GetContext(ModelBase model, TSerializationContext context, SerializationContextMode contextMode)
        {
            Argument.IsNotNull("model", model);
            Argument.IsNotNull("context", context);

            return(new SerializationContext <TSerializationContext>(model, context, contextMode));
        }
コード例 #24
0
        /// <summary>
        /// Gets the context.
        /// </summary>
        /// <param name="model">The model.</param>
        /// <param name="stream">The stream.</param>
        /// <param name="contextMode">The context mode.</param>
        /// <param name="memberValues">The member values.</param>
        /// <returns>The serialization context.</returns>
        private ISerializationContext <BinarySerializationContextInfo> GetContext(ModelBase model, Stream stream, SerializationContextMode contextMode, List <MemberValue> memberValues)
        {
            var serializationInfo = new SerializationInfo(model.GetType(), new FormatterConverter());
            var binaryFormatter   = CreateBinaryFormatter(contextMode);

            if (memberValues == null)
            {
                memberValues = new List <MemberValue>();
            }

            var contextInfo = new BinarySerializationContextInfo(serializationInfo, binaryFormatter, memberValues);

            return(new SerializationContext <BinarySerializationContextInfo>(model, contextInfo, contextMode));
        }
コード例 #25
0
 /// <summary>
 /// Gets the context.
 /// </summary>
 /// <param name="model">The model.</param>
 /// <param name="stream">The stream.</param>
 /// <param name="contextMode">The context mode.</param>
 /// <returns>The serialization context.</returns>
 /// <exception cref="ArgumentNullException">The <paramref name="model" /> is <c>null</c>.</exception>
 /// <exception cref="ArgumentNullException">The <paramref name="stream" /> is <c>null</c>.</exception>
 protected abstract ISerializationContext <TSerializationContext> GetContext(ModelBase model, Stream stream, SerializationContextMode contextMode);
コード例 #26
0
        /// <summary>
        /// Gets the context.
        /// </summary>
        /// <param name="model">The model.</param>
        /// <param name="stream">The stream.</param>
        /// <param name="contextMode">The context mode.</param>
        /// <returns>The serialization context.</returns>
        protected override ISerializationContext <XmlSerializationContextInfo> GetContext(ModelBase model, Stream stream, SerializationContextMode contextMode)
        {
            XDocument document = null;

            try
            {
                if (stream.Length != 0)
                {
                    document = XDocument.Load(stream);
                }
            }
            catch (Exception ex)
            {
                Log.Warning(ex, "Failed to load document from stream, falling back to empty document");
            }

            bool isNewDocument = document == null;

            if (isNewDocument)
            {
                var rootName = "root";
                if (model != null)
                {
                    var modelType = model.GetType();
                    rootName = _rootNameCache.GetFromCacheOrFetch(modelType, () =>
                    {
                        XmlRootAttribute xmlRootAttribute;
                        if (AttributeHelper.TryGetAttribute(modelType, out xmlRootAttribute))
                        {
                            return(xmlRootAttribute.ElementName);
                        }

                        return(rootName = model.GetType().Name);
                    });
                }
                document = new XDocument(new XElement(rootName));
            }

            var contextInfo = new XmlSerializationContextInfo(document.Root, model);
            var context     = new SerializationContext <XmlSerializationContextInfo>(model, contextInfo, contextMode);

            if (isNewDocument)
            {
                AddReferenceId(context, document.Root, model);
            }

            return(context);
        }
コード例 #27
0
ファイル: BinarySerializer.cs プロジェクト: Lukino2000/Catel
 /// <summary>
 /// Gets the context.
 /// </summary>
 /// <param name="model">The model, can be <c>null</c> for value types.</param>
 /// <param name="modelType">Type of the model.</param>
 /// <param name="stream">The stream.</param>
 /// <param name="contextMode">The context mode.</param>
 /// <returns>ISerializationContext{SerializationInfo}.</returns>
 protected override ISerializationContext <BinarySerializationContextInfo> GetContext(object model, Type modelType, Stream stream, SerializationContextMode contextMode)
 {
     return(GetContext(model, modelType, stream, contextMode, null));
 }
コード例 #28
0
ファイル: JsonSerializer.cs プロジェクト: ugurak/Catel
        /// <summary>
        /// Gets the context.
        /// </summary>
        /// <param name="model">The model.</param>
        /// <param name="modelType">Type of the model.</param>
        /// <param name="jsonReader">The json reader.</param>
        /// <param name="jsonWriter">The json writer.</param>
        /// <param name="contextMode">The context mode.</param>
        /// <param name="jsonProperties">The json properties.</param>
        /// <param name="jsonArray">The json array.</param>
        /// <param name="configuration">The configuration.</param>
        /// <returns>
        /// ISerializationContext&lt;JsonSerializationContextInfo&gt;.
        /// </returns>
        protected virtual ISerializationContext <JsonSerializationContextInfo> GetContext(object model, Type modelType, JsonReader jsonReader, JsonWriter jsonWriter,
                                                                                          SerializationContextMode contextMode, Dictionary <string, JProperty> jsonProperties, JArray jsonArray, ISerializationConfiguration configuration)
        {
            var jsonSerializer = new Newtonsoft.Json.JsonSerializer();

            jsonSerializer.ContractResolver = new CatelJsonContractResolver();
            jsonSerializer.Converters.Add(new CatelJsonConverter(this, configuration));

            var contextInfo = new JsonSerializationContextInfo(jsonSerializer, jsonReader, jsonWriter);

            if (jsonProperties != null)
            {
                contextInfo.JsonProperties = jsonProperties;
            }

            if (jsonArray != null)
            {
                contextInfo.JsonArray = jsonArray;
            }

            var context = new SerializationContext <JsonSerializationContextInfo>(model, modelType, contextInfo, contextMode, configuration);

            return(context);
        }
コード例 #29
0
 protected ISerializationContext <TSerializationContext> GetContext(Type modelType, TSerializationContext context, SerializationContextMode contextMode)
 {
     return(GetContext(modelType, context, contextMode, null));
 }