Example #1
0
        /// <summary>
        /// Create the template output
        /// </summary>
        public virtual string TransformText()
        {
            this.Write(@"        /// <summary>
        /// Convert object to JSON string
        /// </summary>
        public string ToJson()
        {
            var builder = new StringBuilder();
            using(var writer = new StringWriter(builder))
            {
                IncludeJson(writer);
                return builder.ToString();
            }
        }

        /// <summary>
        /// Include this class in a JSON string
        /// </summary>
        public void IncludeJson(TextWriter writer)
        {
            writer.Write('{');

");

            #line 25 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"

            var first = true;
            foreach (var property in Model.Properties.WhereAttribute(nameof(DataMemberAttribute)))
            {
            #line default
            #line hidden
                this.Write("            writer.Write(\"");

            #line 31 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(first ? string.Empty : ","));

            #line default
            #line hidden
                this.Write("\\\"");

            #line 31 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(property.Name));

            #line default
            #line hidden
                this.Write("\\\":\");\r\n");

            #line 32 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"

                if (property.IsCollection)
                {
            #line default
            #line hidden
                    this.Write("            if (");

            #line 36 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(property.Name));

            #line default
            #line hidden
                    this.Write(" == null)\r\n            {\r\n                writer.Write(\"null\");\r\n            }\r\n " +
                               "           else\r\n            {\r\n                writer.Write(\'[\');\r\n            " +
                               "    foreach (var value in ");

            #line 43 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(property.Name));

            #line default
            #line hidden
                    this.Write(")\r\n                {\r\n");

            #line 45 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                }
                var target = property.IsCollection ? "value" : property.Name;
                if (property.ValueType == ModelValueType.String)
                {
                    target = $"string.Format(\"\\\"{{0}}\\\"\", {target})";
                }
                else if (property.ValueType != ModelValueType.Class)
                {
                    target = $"{target}.ToString(CultureInfo.InvariantCulture)";
                }


            #line default
            #line hidden
                this.Write("            ");

            #line 53 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(property.IsCollection ? "\t\t" : string.Empty));

            #line default
            #line hidden

            #line 53 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(property.ValueType == ModelValueType.Class ? $"{target}.IncludeJson(writer)" : $"writer.Write({target})"));

            #line default
            #line hidden
                this.Write(";\r\n");

            #line 54 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"

                if (property.IsCollection)
                {
            #line default
            #line hidden
                    this.Write("                    writer.Write(\',\');\r\n                }\r\n                writer" +
                               ".Write(\']\');\r\n            }\r\n");

            #line 62 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                }


            #line default
            #line hidden
                this.Write("    \r\n");

            #line 66 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"

                first = false;
            }


            #line default
            #line hidden
            this.Write("            writer.Write(\'}\');\r\n        }\r\n\r\n        /// <summary>\r\n        /// C" +
                       "onvert object to JSON string\r\n        /// </summary>\r\n        public ");

            #line 76 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(Model.Name));

            #line default
            #line hidden
            this.Write(@" FromJson(string json)
        {
            using (var reader = new JsonTextReader(new StringReader(json)))
            {
                return FromJson(reader);
            }
        }

        /// <summary>
        /// Include this class in a JSON string
        /// </summary>
        public ");

            #line 87 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(Model.Name));

            #line default
            #line hidden
            this.Write(@" FromJson(JsonReader reader)
        {
            while (reader.Read())
            {
                // Break on EndObject
                if (reader.TokenType == JsonToken.EndObject)
                    break;

                // Only look for properties
                if (reader.TokenType != JsonToken.PropertyName)
                    continue;

                switch ((string) reader.Value)
                {
");

            #line 101 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"

            // We start with the easy properties and move on to collections
            foreach (var property in Model.Properties.WhereAttribute(nameof(DataMemberAttribute))
                     .Where(p => !p.IsCollection))
            {
            #line default
            #line hidden
                this.Write("                    case \"");

            #line 107 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(property.Name));

            #line default
            #line hidden
                this.Write("\":\r\n                        reader.Read();\r\n                        ");

            #line 109 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(property.Name));

            #line default
            #line hidden
                this.Write(" = ");

            #line 109 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(Converter(property)));

            #line default
            #line hidden
                this.Write(";\r\n                        break;\r\n\r\n");

            #line 112 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
            }

            // And for the fun part collections but first with only one dimension
            foreach (var property in Model.Properties.WhereAttribute(nameof(DataMemberAttribute))
                     .Where(p => p.IsCollection))
            {
                var varName   = property.Name.ToLower();
                var condition = property.ValueType == ModelValueType.Class
            ? "== JsonToken.StartObject"
            : "!= JsonToken.EndArray";


            #line default
            #line hidden
                this.Write("                    case \"");

            #line 124 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(property.Name));

            #line default
            #line hidden
                this.Write("\":\r\n                        reader.Read(); // Read token where array should begin" +
                           "\r\n                        if (reader.TokenType == JsonToken.Null)\r\n             " +
                           "               break;\r\n                        var ");

            #line 128 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(varName));

            #line default
            #line hidden
                this.Write(" = new List<");

            #line 128 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(property.ElementType));

            #line default
            #line hidden
                this.Write(">();\r\n                        while (reader.Read() && reader.TokenType ");

            #line 129 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(condition));

            #line default
            #line hidden
                this.Write(")\r\n                            ");

            #line 130 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(varName));

            #line default
            #line hidden
                this.Write(".Add(");

            #line 130 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(Converter(property)));

            #line default
            #line hidden
                this.Write(");\r\n                        ");

            #line 131 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(property.Dimensions > 1 ? "// TODO: " : string.Empty));

            #line default
            #line hidden

            #line 131 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(property.Name));

            #line default
            #line hidden
                this.Write(" = ");

            #line 131 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(varName));

            #line default
            #line hidden

            #line 131 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(GeneratorTools.ToCollection(property)));

            #line default
            #line hidden
                this.Write(";");

            #line 131 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(property.Dimensions > 1 ? "<-- Figure this out!" : string.Empty));

            #line default
            #line hidden
                this.Write("\r\n                        break;\r\n\r\n");

            #line 134 "C:\Users\Thomas\Documents\Development\CGbR\CGbR\Generator\Serialization\JsonSerializerGenerator.tt"
            }


            #line default
            #line hidden
            this.Write("                }\r\n            }\r\n\r\n            return this;\r\n        }\r\n");
            return(this.GenerationEnvironment.ToString());
        }