예제 #1
0
        public void ExportMembers(Expression expression, int currentDepth)
        {
            string expressionType;

            if (isFirstElement) //TODO: can probably replace isFirstElement with currentDepth = 0
            {
                //Frameworks can add theType { dynamicType} - strip out the {dynamic type}
                expressionType = GeneratorHelper.StripChildReference(expression.Type);
            }
            else
            {
                //members of objects have a type of: object { theType } - strip out object { }
                expressionType = GeneratorHelper.StripObjectReference(expression.Type);
            }

            if (!GeneratorHelper.IsSerializable(expression.Name))
            {
                return;
            }
            else if (expression.Value == "null")
            {
                return;
            }
            else if (GeneratorHelper.CanBeExpressedAsSingleType(expressionType))
            {
                WriteLine("");
                if (GeneratorHelper.IsCollectionMember(expression.Name))
                {
        #line default
        #line hidden

        #line 41 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\XmlGenerator.tt"
                    this.Write("<");


        #line default
        #line hidden

        #line 41 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\XmlGenerator.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(expressionType));


        #line default
        #line hidden

        #line 41 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\XmlGenerator.tt"
                    this.Write(">");


        #line default
        #line hidden

        #line 41 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\XmlGenerator.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(GetSingleTypeValue(expression)));


        #line default
        #line hidden

        #line 41 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\XmlGenerator.tt"
                    this.Write("</");


        #line default
        #line hidden

        #line 41 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\XmlGenerator.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(expressionType));


        #line default
        #line hidden

        #line 41 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\XmlGenerator.tt"
                    this.Write(">");


        #line default
        #line hidden

        #line 41 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\XmlGenerator.tt"
                }
                else
                {
        #line default
        #line hidden

        #line 45 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\XmlGenerator.tt"
                    this.Write("<");


        #line default
        #line hidden

        #line 45 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\XmlGenerator.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(expression.Name));


        #line default
        #line hidden

        #line 45 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\XmlGenerator.tt"
                    this.Write(">");


        #line default
        #line hidden

        #line 45 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\XmlGenerator.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(GetSingleTypeValue(expression)));


        #line default
        #line hidden

        #line 45 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\XmlGenerator.tt"
                    this.Write("</");


        #line default
        #line hidden

        #line 45 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\XmlGenerator.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(expression.Name));


        #line default
        #line hidden

        #line 45 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\XmlGenerator.tt"
                    this.Write(">");


        #line default
        #line hidden

        #line 45 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\XmlGenerator.tt"
                }
            }
            else if (expression.DataMembers.Count == 0)
            {
                WriteLine("");
                string node = expression.Name;
                if (GeneratorHelper.IsCollectionMember(expression.Name))
                {
                    node = expressionType;
                }



        #line default
        #line hidden

        #line 57 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\XmlGenerator.tt"
                this.Write("<");


        #line default
        #line hidden

        #line 57 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\XmlGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(node));


        #line default
        #line hidden

        #line 57 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\XmlGenerator.tt"
                this.Write(">");


        #line default
        #line hidden

        #line 57 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\XmlGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(expression.Value));


        #line default
        #line hidden

        #line 57 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\XmlGenerator.tt"
                this.Write("</");


        #line default
        #line hidden

        #line 57 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\XmlGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(node));


        #line default
        #line hidden

        #line 57 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\XmlGenerator.tt"
                this.Write(">");


        #line default
        #line hidden

        #line 57 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\XmlGenerator.tt"
            }
            else if (expression.DataMembers.Count > 0 && currentDepth <= maxDepth)
            {
                //used for the very first object (top most) to be completed as var objName = new objType, without a space in between.
                if (isFirstElement)
                {
                    isFirstElement = false;
                }
                else
                {
                    WriteLine("");
                }

                string node = expressionType;
                if (GeneratorHelper.IsTypeOfCollection(expressionType) && !GeneratorHelper.IsCollectionMember(expression.Name))
                {
                    node = expression.Name;
                }

                List <Expression> cleanedExpressionMembers = GeneratorHelper.SanitizeExpressions(expression, _ruleSetValidator, expressionType);



        #line default
        #line hidden

        #line 79 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\XmlGenerator.tt"
                this.Write("<");


        #line default
        #line hidden

        #line 79 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\XmlGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(node));


        #line default
        #line hidden

        #line 79 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\XmlGenerator.tt"
                this.Write(">");


        #line default
        #line hidden

        #line 79 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\XmlGenerator.tt"

                foreach (Expression exp in cleanedExpressionMembers)
                {
                    PushIndent("\t");
                    ExportMembers(exp, currentDepth + 1);
                    PopIndent();
                }
                WriteLine("");


        #line default
        #line hidden

        #line 87 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\XmlGenerator.tt"
                this.Write("</");


        #line default
        #line hidden

        #line 87 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\XmlGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(node));


        #line default
        #line hidden

        #line 87 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\XmlGenerator.tt"
                this.Write(">");


        #line default
        #line hidden

        #line 87 "C:\Users\Arel\Documents\GitHub\ObjectExporter\ObjectExporter.Core\Templates\XmlGenerator.tt"
            }
        }
예제 #2
0
        public void ExportMembers(Expression expression, int currentDepth, bool isLast)
        {
            string expressionType;

            if (isFirstElement) //TODO: can probably replace isFirstElement with currentDepth = 0
            {
                //Frameworks can add theType { dynamicType} - strip out the {dynamic type}
                expressionType = GeneratorHelper.GetBaseClassFromType(expression.Type);
            }
            else
            {
                //members of objects have a type of: object { theType } - strip out object { }
                expressionType = GeneratorHelper.GetSubClassFromType(expression.Type);
            }

            if (!GeneratorHelper.IsSerializable(expression.Name))
            {
                return;
            }
            else if (GeneratorHelper.CanBeExpressedAsSingleType(expressionType))
            {
                WriteLine("");

                if (GeneratorHelper.IsCollectionMember(expression.Name))
                {
        #line default
        #line hidden

        #line 37 "H:\Dropbox\GitHub\ObjectExporter\ObjectExporter.Core\Templates\JsonGenerator.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(GetSingleTypeValue(expression) + GeneratorHelper.WriteCommaIfNotLast(isLast)));


        #line default
        #line hidden

        #line 37 "H:\Dropbox\GitHub\ObjectExporter\ObjectExporter.Core\Templates\JsonGenerator.tt"
                }
                else
                {
        #line default
        #line hidden

        #line 41 "H:\Dropbox\GitHub\ObjectExporter\ObjectExporter.Core\Templates\JsonGenerator.tt"
                    this.Write("\"");


        #line default
        #line hidden

        #line 41 "H:\Dropbox\GitHub\ObjectExporter\ObjectExporter.Core\Templates\JsonGenerator.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(expression.Name));


        #line default
        #line hidden

        #line 41 "H:\Dropbox\GitHub\ObjectExporter\ObjectExporter.Core\Templates\JsonGenerator.tt"
                    this.Write("\": ");


        #line default
        #line hidden

        #line 41 "H:\Dropbox\GitHub\ObjectExporter\ObjectExporter.Core\Templates\JsonGenerator.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(GetSingleTypeValue(expression) + GeneratorHelper.WriteCommaIfNotLast(isLast)));


        #line default
        #line hidden

        #line 41 "H:\Dropbox\GitHub\ObjectExporter\ObjectExporter.Core\Templates\JsonGenerator.tt"
                }
            }
            else if (expression.DataMembers.Count == 0)
            {
                WriteLine("");
                if (GeneratorHelper.IsCollectionMember(expression.Name))
                {
        #line default
        #line hidden

        #line 49 "H:\Dropbox\GitHub\ObjectExporter\ObjectExporter.Core\Templates\JsonGenerator.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(expression.Value + GeneratorHelper.WriteCommaIfNotLast(isLast)));


        #line default
        #line hidden

        #line 49 "H:\Dropbox\GitHub\ObjectExporter\ObjectExporter.Core\Templates\JsonGenerator.tt"
                }
                else
                {
        #line default
        #line hidden

        #line 53 "H:\Dropbox\GitHub\ObjectExporter\ObjectExporter.Core\Templates\JsonGenerator.tt"
                    this.Write("\"");


        #line default
        #line hidden

        #line 53 "H:\Dropbox\GitHub\ObjectExporter\ObjectExporter.Core\Templates\JsonGenerator.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(expression.Name));


        #line default
        #line hidden

        #line 53 "H:\Dropbox\GitHub\ObjectExporter\ObjectExporter.Core\Templates\JsonGenerator.tt"
                    this.Write("\": ");


        #line default
        #line hidden

        #line 53 "H:\Dropbox\GitHub\ObjectExporter\ObjectExporter.Core\Templates\JsonGenerator.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(expression.Value + GeneratorHelper.WriteCommaIfNotLast(isLast)));


        #line default
        #line hidden

        #line 53 "H:\Dropbox\GitHub\ObjectExporter\ObjectExporter.Core\Templates\JsonGenerator.tt"
                }
            }
            else if (expression.DataMembers.Count > 0 && currentDepth <= maxDepth)
            {
                //used for the very first object (top most) to be completed as var objName = new objType, without a space in between.
                if (isFirstElement)
                {
                    isFirstElement = false;
                }
                else
                {
                    WriteLine("");
                }

                if (GeneratorHelper.IsCollectionMember(expression.Name) && GeneratorHelper.IsTypeOfCollection(expressionType))
                {
        #line default
        #line hidden

        #line 70 "H:\Dropbox\GitHub\ObjectExporter\ObjectExporter.Core\Templates\JsonGenerator.tt"
                    this.Write("[");


        #line default
        #line hidden

        #line 70 "H:\Dropbox\GitHub\ObjectExporter\ObjectExporter.Core\Templates\JsonGenerator.tt"
                }
                else if (GeneratorHelper.IsTypeOfCollection(expressionType))
                {
        #line default
        #line hidden

        #line 74 "H:\Dropbox\GitHub\ObjectExporter\ObjectExporter.Core\Templates\JsonGenerator.tt"
                    this.Write("\"");


        #line default
        #line hidden

        #line 74 "H:\Dropbox\GitHub\ObjectExporter\ObjectExporter.Core\Templates\JsonGenerator.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(expression.Name));


        #line default
        #line hidden

        #line 74 "H:\Dropbox\GitHub\ObjectExporter\ObjectExporter.Core\Templates\JsonGenerator.tt"
                    this.Write("\": ");


        #line default
        #line hidden

        #line 74 "H:\Dropbox\GitHub\ObjectExporter\ObjectExporter.Core\Templates\JsonGenerator.tt"

                    WriteLine("");

        #line default
        #line hidden

        #line 75 "H:\Dropbox\GitHub\ObjectExporter\ObjectExporter.Core\Templates\JsonGenerator.tt"
                    this.Write("[");


        #line default
        #line hidden

        #line 75 "H:\Dropbox\GitHub\ObjectExporter\ObjectExporter.Core\Templates\JsonGenerator.tt"
                }
                else
                {
        #line default
        #line hidden

        #line 79 "H:\Dropbox\GitHub\ObjectExporter\ObjectExporter.Core\Templates\JsonGenerator.tt"
                    this.Write("{");


        #line default
        #line hidden

        #line 79 "H:\Dropbox\GitHub\ObjectExporter\ObjectExporter.Core\Templates\JsonGenerator.tt"
                }

                List <Expression> cleanedExpressionMembers = GeneratorHelper.SanitizeExpressions(expression, _ruleSetValidator, expressionType);

                foreach (Expression exp in cleanedExpressionMembers)
                {
                    PushIndent("\t");
                    bool isLastItem = cleanedExpressionMembers.IsLast(exp);
                    ExportMembers(exp, currentDepth + 1, isLastItem);
                    PopIndent();
                }

                TerminateObjectOrCollection(expressionType);


        #line default
        #line hidden

        #line 93 "H:\Dropbox\GitHub\ObjectExporter\ObjectExporter.Core\Templates\JsonGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(GeneratorHelper.WriteCommaIfNotLast(isLast)));


        #line default
        #line hidden

        #line 93 "H:\Dropbox\GitHub\ObjectExporter\ObjectExporter.Core\Templates\JsonGenerator.tt"
                this.Write(" ");


        #line default
        #line hidden

        #line 93 "H:\Dropbox\GitHub\ObjectExporter\ObjectExporter.Core\Templates\JsonGenerator.tt"
            }
        }