using System.Collections.Generic;
using Newtonsoft.Json.Linq;
public static void Main()
var item1 = new DatamapItem();
item1.datamapKey = new DatamapKey();
item1.datamapKey.DatamapKeyFields.Add("module", 1);
item1.datamapKey.DatamapKeyFields.Add("id", 1391);
item1.DatamapItemFields.Add("paramName", "VE8321C");
item1.DatamapItemFields.Add("min", "0");
item1.DatamapItemFields.Add("max", "40");
var item2 = new DatamapItem();
item2.datamapKey = new DatamapKey();
item2.datamapKey1 = new DatamapKey1();
item2.DatamapItemFields.Add("paramName", "VE8321C");
item2.DatamapItemFields.Add("min", "0");
item2.DatamapItemFields.Add("max", "40");
var item3 = new DatamapItem();
item3.datamapKey = new DatamapKey();
item3.datamapKey.DatamapKeyFields.Add("module", 1);
item3.datamapKey.DatamapKeyFields.Add("id", 1391);
item3.datamapKey1 = new DatamapKey1();
item3.datamapKey1.DatamapKey1Fields.Add("module", 1);
item3.datamapKey1.DatamapKey1Fields.Add("id", 1391);
item3.DatamapItemFields.Add("paramName", "VE8321C");
item3.DatamapItemFields.Add("min", "0");
item3.DatamapItemFields.Add("max", "40");
var root = new RootObject
datamapItems = new List<DatamapItem> { item1, item2, item3 }
var json = JsonHelper.SerializeToMinimalJson(root);
public Dictionary<string, JToken> DatamapKeyFields = new Dictionary<string, JToken>();
public Dictionary<string, JToken> DatamapKey1Fields = new Dictionary<string, JToken>();
public Dictionary<string, JToken> DatamapItemFields { get; set; }
public DatamapKey datamapKey { get; set; }
public DatamapKey1 datamapKey1 { get; set; }
DatamapItemFields = new Dictionary<string, JToken>();
public List<DatamapItem> datamapItems { get; set; }
public static class JsonHelper
public static string SerializeToMinimalJson(object obj)
return JToken.FromObject(obj).RemoveEmptyChildren().ToString();
public static JToken RemoveEmptyChildren(this JToken token)
if (token.Type == JTokenType.Object)
JObject copy = new JObject();
foreach (JProperty prop in token.Children<JProperty>())
JToken child = prop.Value;
child = child.RemoveEmptyChildren();
if (!child.IsNullOrEmpty())
copy.Add(prop.Name, child);
else if (token.Type == JTokenType.Array)
JArray copy = new JArray();
foreach (JToken item in token.Children())
child = child.RemoveEmptyChildren();
if (!child.IsNullOrEmpty())
public static bool IsNullOrEmpty(this JToken token)
(token.Type == JTokenType.Array && !token.HasValues) ||
(token.Type == JTokenType.Object && !token.HasValues) ||
(token.Type == JTokenType.String && token.ToString() == String.Empty) ||
(token.Type == JTokenType.Null);