Beispiel #1
0
        public string Serialize(string rptPath, string filepath = null, int reportOrder = 1)//, OutputFormat fmt = OutputFormat.json)
        {
            var rpt = new ReportDocument();

            rpt.Load(rptPath);
            var rptClient = rpt.ReportClientDocument;

            var jsonSerializerSettings = new JsonSerializerSettings
            {
                ContractResolver = new CustomJsonResolver(),
                Formatting       = Formatting.Indented
            };

            string rptName = string.IsNullOrEmpty(rpt.Name)
                ? Path.GetFileNameWithoutExtension(rptPath)
                : rpt.Name;

            var sb = new StringBuilder();
            var sw = new StringWriter(sb);

            using (JsonWriter jw = new JsonTextWriter(sw))
            {
                jw.Formatting = Formatting.Indented;

                jw.WriteStartObject();

                jw.WriteObjectHierarchy("Entire Report Object", rpt);

                jw.WriteProperty("SerializeVersion", CRSerializeProductVersion());

                jw.WriteProperty("ReportName", rptName);

                jw.WriteParameters("Parameters", rpt);

                jw.WriteObjectHierarchy("SummaryInfo", rpt.SummaryInfo);

                // experimental properties:
                jw.WriteObjectHierarchy("DataSourceConnections", rpt.DataSourceConnections);

                jw.WriteObjectHierarchy("ParameterFields", rpt.ParameterFields);

                jw.WriteObjectHierarchy("ReportOptions", rptClient.ReportOptions);

                jw.WriteDataSource("DataSource", rptClient.Database.Tables);

                jw.WriteObjectHierarchy("DatabaseTables", rpt.Database.Tables);

                jw.WriteObjectHierarchy("DataDefinition", rpt.DataDefinition);

                jw.WritePrintOptions(rpt.PrintOptions);

                jw.WriteObjectHierarchy("CustomFunctions", rptClient.CustomFunctionController.GetCustomFunctions());

                jw.WriteObjectHierarchy("ReportDefinition", rpt.ReportDefinition);

                jw.WritePropertyName("Subreports");
                var subReports = rpt.Subreports;
                if (subReports.Count > 0)
                {
                    jw.WriteStartArray();
                    foreach (ReportDocument subReport in subReports)
                    {
                        var subReportClient = rptClient.SubreportController.GetSubreport(subReport.Name);

                        jw.WriteStartObject();
                        jw.WriteProperty("SubreportName", subReport.Name);

                        jw.WriteParameters("Parameters", subReport);

                        jw.WriteDataSource("DataSource", subReportClient.DataDefController.Database.Tables);

                        jw.WriteObjectHierarchy("DatabaseTables", subReport.Database.Tables);

                        jw.WriteObjectHierarchy("DataDefinition", subReport.DataDefinition);

                        jw.WriteObjectHierarchy("CustomFunctions", rptClient.CustomFunctionController.GetCustomFunctions());

                        jw.WriteObjectHierarchy("ReportDefinition", subReport.ReportDefinition);

                        jw.WriteEndObject();
                    }
                }

                jw.WriteEndObject(); // final end
                rpt.Close();

                return(sb.ToString());
            }
        }