PrimitiveCodeDomSerializer.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / Designer / CompMod / System / ComponentModel / Design / Serialization / PrimitiveCodeDomSerializer.cs / 1 / PrimitiveCodeDomSerializer.cs

                            //------------------------------------------------------------------------------
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
//  
//-----------------------------------------------------------------------------
 
/* 
 */
namespace System.ComponentModel.Design.Serialization { 

    using System;
    using System.CodeDom;
    using System.CodeDom.Compiler; 
    using System.Collections;
    using System.ComponentModel; 
    using System.ComponentModel.Design; 
    using System.Diagnostics;
    using System.Reflection; 

    /// 
    /// 
    ///     Code model serializer for primitive types. 
    /// 
    internal class PrimitiveCodeDomSerializer : CodeDomSerializer { 
 
        private static readonly string JSharpFileExtension = ".jsl";
        private static PrimitiveCodeDomSerializer defaultSerializer; 

        /// 
        /// 
        ///     Retrieves a default static instance of this serializer. 
        /// 
        internal new static PrimitiveCodeDomSerializer Default { 
            get { 
                if (defaultSerializer == null) {
                    defaultSerializer = new PrimitiveCodeDomSerializer(); 
                }
                return defaultSerializer;
            }
        } 

        ///  
        ///  
        ///     Serializes the given object into a CodeDom object.
        ///  
        public override object Serialize(IDesignerSerializationManager manager, object value) {
            using (TraceScope("PrimitiveCodeDomSerializer::Serialize")) {
                Trace("Value: {0}",  (value == null ? "(null)" : value.ToString()));
            } 

            CodeExpression expression = new CodePrimitiveExpression(value); 
 
            if (value != null) {
                if (value is bool || value is char || value is int || value is float || value is double) { 

                    // Hack for J#, since they don't support auto-boxing of value types yet.
                    CodeDomProvider codeProvider = manager.GetService(typeof(CodeDomProvider)) as CodeDomProvider;
                    if (codeProvider != null && String.Equals(codeProvider.FileExtension, JSharpFileExtension)) { 
                        // See if we are boxing - if so, insert a cast.
                        ExpressionContext cxt = manager.Context[typeof(ExpressionContext)] as ExpressionContext; 
                        Debug.Assert(cxt != null, "No expression context on stack - J# boxing cast will not be inserted"); 
                        if (cxt != null) {
                            if (cxt.ExpressionType == typeof(object)) { 
                                expression = new CodeCastExpression(value.GetType(), expression);
                                expression.UserData.Add("CastIsBoxing", true);
                            }
                        } 
                    }
                } 
                else if (value is string) { 
                    string stringValue = value as string;
                    if (stringValue != null && stringValue.Length > 200) { 
                        expression = SerializeToResourceExpression(manager, stringValue);
                    }
                }
                else { 
                    // Generate a cast for all other types because we won't parse them properly otherwise
                    // because we won't know to convert them to the narrow form. 
                    expression = new CodeCastExpression(new CodeTypeReference(value.GetType()), expression); 
                }
            } 

            return expression;
        }
    } 
}
 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK