Using MailMerge with JSON Data
In the last article, we explained how to create an ASP.NET Web API to merge templates with JSON data in the payload body of an HTTP request. The focus of this article was on the Web API and RESTful services itself. Extracted from this project, this sample shows how to merge a template with a JSON string directly. The JSON data string has the following form: It is the JSON representation of a flat XML file with nested data tables created with Newtonsoft.Json: The following method accepts a…

In the last article, we explained how to create an ASP.NET Web API to merge templates with JSON data in the payload body of an HTTP request. The focus of this article was on the Web API and RESTful services itself.
Extracted from this project, this sample shows how to merge a template with a JSON string directly. The JSON data string has the following form:
{
"orders":{
"order":[
{
"Id":"10",
"address":{
"street":"9774 Kings Drive",
"city":"Charlotte"
},
"phone":"123 898 2298",
"date":"05/12/2015",
"total":"1526.88",
"item":[
{
"name":"Thin-Jam Hex Nut 4",
"price":"337.22",
"qty":"1",
"itemtotal":"337.22"
},
{
"name":"ML Road Frame - Red, 58",
"price":"594.83",
"qty":"2",
"itemtotal":"1189.66"
}
]
}
]
}
}
It is the JSON representation of a flat XML file with nested data tables created with Newtonsoft.Json:
// load the data as XML
XmlDocument doc = new XmlDocument();
doc.Load(Server.MapPath("sample_db.xml"));
// the Web API expects the data as a JSON object
// 'JsonConvert' converts the XML to the required JSON format
string jsonText = JsonConvert.SerializeXmlNode(doc);
The following method accepts a template name and the JSON string as parameters. The JSON string is converted back to an XML file which is then converted to a DataSet object.
private void MergeTemplate(string templateName, string JsonData)
{
// creating a new ServerTextControl and MailMerge class
using (ServerTextControl tx = new ServerTextControl())
{
tx.Create();
MailMerge mailMerge = new MailMerge();
mailMerge.TextComponent = tx;
// load the template
mailMerge.LoadTemplate(Server.MapPath("templates/" + templateName),
FileFormat.InternalUnicodeFormat);
// create a new DataSet object
DataSet ds = new DataSet();
XmlDocument doc;
// convert the JSON string to an XML document
// object using Newtonsoft.Json
try
{
doc = JsonConvert.DeserializeXmlNode(JsonData);
lblError.Visible = false;
}
catch (Exception exc)
{
lblError.Visible = true;
lblError.Text = exc.Message;
DocumentViewer1.Visible = false;
return;
}
// convert the XML to a DataSet
XmlNodeReader reader = new XmlNodeReader(doc);
ds.ReadXml(reader, XmlReadMode.Auto);
// merge the template with the DataSet
mailMerge.Merge(ds.Tables[0]);
// load the resulting document into the DocumentViewer
byte[] data;
mailMerge.SaveDocumentToMemory(out data, BinaryStreamType.InternalUnicodeFormat, null);
DocumentViewer1.LoadDocumentFromMemory(data, FileFormat.InternalUnicodeFormat);
}
}
Finally, the document is merged by calling the Merge method. The resulting document is loaded into the ASP.NET DocumentViewer for visualization.
Download the sample from GitHub and test it on your own.
Download and Fork This Sample on GitHub
We proudly host our sample code on github.com/TextControl.
Please fork and contribute.
Requirements for this sample
- Visual Studio 2012 or better
- TX Text Control .NET Server (trial sufficient)
Reporting
The Text Control Reporting Framework combines powerful reporting features with an easy-to-use, MS Word compatible word processor. Users can create documents and templates using ordinary Microsoft Word skills. The Reporting Framework is included in all .NET based TX Text Control products including ASP.NET, Windows Forms and WPF.
Related Posts
Merging Documents with RESTful Web API's
ASP.NET Web API is a framework that makes it easy to build HTTP services that reach a broad range of clients, including browsers and mobile devices. ASP.NET Web API is an ideal platform for…
Creating Your First ASP.NET Reporting Application
This tutorial shows how to use the MailMerge component in an ASP.NET Web application to merge a template with data to create an Adobe PDF document.
New Online Sample: Build your First Report
We published a new online demo that shows how to create a report including preparing data, creating a template to merging them together.
ReportingDocumentationReportingCloud
Create your First Document with ReportingCloud
As part of our new ReportingCloud documentation, we published a guided tutorial that shows how to create a document without programming.
ReportingReportingCloudWeb API
Text Control as a Service: Outsource Your Document Processes
Using ReportingCloud, TX Text Control functionality can be used in any platform and document processes can be outsourced.